vue基于 element ui 的按钮点击节流

vue的按钮点击节流

场景:

1、在实际使用中,当我们填写表单,点击按钮提交的时候,当接口没返回之前,迅速的点击几次,就会造成多次提交。

2、获取验证码,不频繁的获取。

3、弹幕不能频繁的发

基于这几个场景,对 element-ui 的按钮进行扩展 节流

主要使用到了 vue的

$listeners  $attrs

$listeners:子组件里面,获取父组件对子组件 v-on 的所有监听事件

$attrs: 包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind="$attrs" 传入内部组件——在创建高级别的组件时非常有用。

详细代码如下:

<template>
    <el-button v-bind="$attrs" v-on="evet" :disabled="disabled"><slot></slot></el-button>
</template>
<script>
export default {
    name:"throat-btn",
    computed:{
        evet(){
            if(this.$listeners.click ){
                this.$listeners.click = this.throat(this.$listeners.click);
            }
            return  this.$listeners;
        },
        disabled(){
            if(this.timer){
                return true;
            }else{
                return false;
            }
        }
    },
    data(){
        return {
            timer:null
        }
    },
    methods:{
        throat(fn){
            const me = this;
            return (...args)=>{
                if(!me.timer){
                    me.$emit("click",...args);
                    me.timer = setTimeout(() => {
                        me.timer = null;
                    }, me.$attrs.throat || 5000); //默认5s的,节流
                }else{
                    me.$emit("droped",...args);
                }
            }
        }
    }
}
</script>

  

使用:

<template>
  <div class="home">

    <throatButton @click="customClick"  :throat="5000" >默认按钮</throatButton>
    <throatButton type="primary" @click="customClick">主要按钮</throatButton>
    <throatButton type="success" disabled>成功按钮</throatButton>
    <throatButton type="info" disabled>信息按钮</throatButton>
    <throatButton type="warning" disabled>警告按钮</throatButton>
    <throatButton type="danger" disabled>危险按钮</throatButton>
  </div>
</template>

<script>
// @ is an alias to /src
import throatButton from "@/components/throat-button.vue";
export default {
  name: ‘home‘,
  components: {
    throatButton
  },
  mounted(){

  },
  methods:{
    customClick(e){
      console.log("----------customClick----------",e);
    },
    onchange(e){
      console.log("------onchange-------------",e);
    }
  }
}
</script>

  

原文地址:https://www.cnblogs.com/muamaker/p/11560162.html

时间: 2024-10-07 17:05:59

vue基于 element ui 的按钮点击节流的相关文章

vue开源Element UI表单设计及代码生成器

在日常的开发工作中,表单开发是较为繁琐且重复的.本文介绍一个我自己写的,提高开发效率的小工具. 1 可视化设计器 设计器基于Element UI ,可通过点击或拖拽的方式设计基本表单, 设计器生成的代码可直接运行在基于 Element 的 vue 项目中. github仓库   https://github.com/JakHuang/form-generator 码云仓库  https://gitee.com/mrhj/form-generator 演示地址 https://mrhj.gitee

Vue框架Element UI教程(二)

原文:https://www.jianshu.com/p/1704b5935a8 [时间选择器] Element UI手册:https://cloud.tencent.com/developer/doc/1270 中文文档:http://element-cn.eleme.io/#/zh-CN github地址:https://github.com/ElemeFE/element 前一篇已经安装好了Element UI环境,现在开始来实际操作框架提供的一些组件的运用了. 在准备好以下文章里面的内容

net MVC +Vue.js+Element UI 笔记

最近项目需求要用到Vue 与 Element UI.但是又不想用Node.js.就结合了Net.MVC来做项目开发.故而做个笔记来记录一些遇到的问题和处理思路 用到MVC主要考虑是到 对 Node.js 不是特别了解.不想给自己埋坑. 而且基于MVC的话,能用到MVC的服务器端渲染,Session,验证,路由机制等等还是非常和嗨皮的. 然而集合MVC的话,比较烦的是在做可复用Component和JS文件的封装上没Node.js那么方便. Note:不得不吐槽,Vue.js简直和Flash Fle

关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题

方法使用前需了解: 来自”和“小编的小提示: 首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form. 其次在拿到了正确的form后,检查该form上添加的表单验证是否正确,需要注意的点有: 1.使用此方法前检查prop一定必须要写在<el-form-item>上面,写在里面的input上或者其他任何地方都不行(el-form-item prop属性绑定) 2.el-form rules,model属性绑定,ref标识 自定义表单验证的坑: 一.valid

关于vue和element ui的国际化

因为公司需求近日一直在做国际化处理, 首先,我们用的是vue的单文件组件,实现国际化是在写好的一个文件组件里面vue_min.js里,而且它相当于一个js的模块,在每一个单文件的组件里面使用. 遇见的第一个问题国际化失败,只显示自己定义的json文件国际化.而且element ui的的国际化不显示, 解决的方案就是, 1.引入的时候应该从新引入 import enLocale from 'element-ui/lib/locale/lang/en' import zhLocale from 'e

vue 集成 element ui

打开vue项目所在的项目路径 输入 npm install element-ui -S 安装element ui 表示安装成功 在vue项目下的node_modules下会显示 element ui 配置element ui 改变项目目录中的main.js文件: 初始main.js文件: import Vue from 'vue'import App from './App'import router from './router'import ElementUI from 'element-u

UI单据按钮点击事件校验

一.按钮点击前事务处理<BeforeEventProcess> public override void BeforeEventProcess(IPart part, string eventName, object sender, EventArgs args, out bool executeDefault) { base.BeforeEventProcess(part, eventName, sender, args, out executeDefault); UFWebButton4T

Vue 添加element UI

根据文档.按需加载模块需要配置(若不是按需加载则不用改这个文件) .babelrc文件; er vue-cli预先生成的文件内容是: { "presets": [ ["env", { "modules": false, "targets": { "browsers": ["> 1%", "last 2 versions", "not ie <=

vue 修改element ui 的默认样式

应该还能针对其他的奇葩样式修改的 比如:mint-ui,vux 应该都适用 1.在样式  后加 !important ,例如:width: 178px !important; 2.<style scope>  </style> 中的scope去掉 3.vue有一个默认的<style scope>  </style>标签,这是后重新新建一个<style>  </style>的标签.区分开来,就是使用两个<style>  &l