Vue.js以组件或者插件的形式实现throttle或者debounce

发布于 2020-3-9|

复制链接

摘记: 需求在业务中,会碰到许多点击请求的情况,在请求前改变一个lock变量(在lock变回来之前,点击无效),在请求回调中再改变lock.以确保在,请求回来之前,不会重复请求。或者类似的点击节流业务实现方式

指令

```xhtml

指令

//getData是函数名,a是传入的参数

directives: ..

需求在业务中,会碰到许多点击请求的情况,在请求前改变一个lock变量(在lock变回来之前,点击无效),在请求回调中再改变lock.以确保在,请求回来之前,不会重复请求。或者类似的点击节流业务实现方式指令

```xhtml

指令

//getData是函数名,a是传入的参数

directives: {

demo: {

bind(el: Element, binding: any, vnode: VNode) {

const that: any = vnode.context

// console.log(binding, vnode)

// console.log(binding.arg, binding.value)

if (!that[binding.arg].isBind){ // 打上标记,如果已经转换了,就不转了

that[binding.arg] = deb(that[binding.arg])

that[binding.arg].isBind = true

}

el.addEventListener('click', function T(event: Event): void{

that[binding.arg](binding.value)

})

},

},

},

```

组件子组件

```javascript

import Vue from 'vue';

import { Component, Prop } from 'vue-property-decorator';

@Component({})

export default class Child extends Vue {

@Prop({ type: Number, default: 500 }) public timeOut!: number; // 时间

@Prop({ type: String, default: 'throttle' }) public type!: string; // 类型

@Prop() public params!: any; // 传入参数

public message: string = 'Hello';

public throttleLock: boolean = false;

public debounceLock: number = 0;

public time: any;

public senClick(): void {

console.log(this.timeOut, this.type, this.params);

if (this.type === 'throttle') {

if (this.throttleLock) {

return;

}

this.throttleLock = true;

setTimeout(() => {

this.throttleLock = false;

}, this.timeOut);

this.$emit('myClick', this.params);

} else if (this.type === 'debounce') {

if (this.debounceLock) {

clearTimeout(this.debounceLock);

}

this.debounceLock = setTimeout(() => {

this.$emit('myClick', this.params);

}, this.timeOut);

} else {

this.$emit('myClick', this.params);

}

}

}

div {

width: 100%;

height: 100%;

}

```

父组件

```javascript

我是组件内容

import { Component, Vue } from 'vue-property-decorator';

import throttleAndDebounce from '@/components/throttleAndDebounce.vue';

@Component({

components: {

throttleAndDebounce,

},

})

export default class home extends Vue {

public getData(e: any){

console.log('异步数据', e)

}

}

```

plugin函数

```javascript

function deb(fn: function){

let lock: number

return (e) => {

if (lock){

clearTimeout(lock)

}

console.log('创建闭包延迟执行')

lock = setTimeout(() => {

fn(e)

}, 1500)

}

}

export {deb}

```

组件内使用

```javascript

function

import { Component, Vue } from 'vue-property-decorator';

import {deb} from '@/assets'

@Component({

components: {

throttleAndDebounce,

},

})

export default class home extends Vue {

public beforeCreate(){

this.func = deb((e: {a: number}) => {

console.log('this', e)

})

}

}

```

debounce实现 js_Vue.js以组件或者插件的形式实现throttle或者debounce相关推荐

  1. js插件---JS表格组件BootstrapTable行内编辑解决方案x-editable

    js插件---JS表格组件BootstrapTable行内编辑解决方案x-editable 参考文章: (1)js插件---JS表格组件BootstrapTable行内编辑解决方案x-editable ...

  2. Bootstrap学习笔记02【全局CSS样式、组件和插件、案例_黑马旅游网_首页】

    Java后端 学习路线 笔记汇总表[黑马程序员] Bootstrap学习笔记01[快速入门.栅格布局][day01] Bootstrap学习笔记02[全局CSS样式.组件和插件.案例_黑马旅游网][d ...

  3. Java调用 新浪微博API 接口发微博(包含js微博组件、springMVC新浪登录)详解

    参考自:http://www.myexception.cn/program/1930025.html https://blog.csdn.net/qq_36580777/article/details ...

  4. 前端框架,库,组件,插件,控件的理解

    框架就是提供了前端项目整体解决方案.库就是自己组合来实现项目. 某种层面上来说,前端库就像我平时家里的工具箱,里面有起子.锤子,我们可以通过这个工具箱来给小孩子创造玩具,我们甚至可以自己创造一些工具, ...

  5. 360奇舞团钟恒:选用Vue.js进行组件化开发,我们遇到了哪些坑?

    责编:陈秋歌,关注前端开发领域,寻求报道或者投稿请发邮件chenqg#csdn.net. 欢迎加入"CSDN前端开发者"微信群,参与热点.难点技术交流.请加群主微信「Rachel_ ...

  6. 微信小程序组件和插件

    微信小程序的组件和插件 一.基础组件 1.主要的基础组件 2.基础组件的使用 (1)基本用法 (2)其他用法 二.自定义组件 自定义组件的使用 (1)创建组件 (2)配置组件 (3)使用自定义组件 三 ...

  7. 微信小程序_文档_05_框架_组件_插件_多线程_兼容_优化

    基础组件 框架为开发者提供了一系列基础组件,开发者可以通过组合这些基础组件进行快速开发. 详细介绍请参考组件文档 自定义组件 从小程序基础库版本 1.6.3 开始,小程序支持简洁的组件化编程.所有自定 ...

  8. Vue.js 父子组件通信的十种方式;告诉世界前端也能做 AI;你可能不知道的14个JavaScript调试技巧...

    记得点击文章末尾的"阅读原文"查看哟~ 下面先一起看下本周的摘要吧~ 想了解老用户如何参与阿里云双十一1折拼团特惠主机的,可以看第二条推送,文中提供了两种方法~,一起看看本周有哪些 ...

  9. vue调用cordova 插件_Vue.js 使用cordova camera插件调取相机

    本文给出在vue.js里如何使用cordova的插件完成调取相机及图库,并完成图片上传的操作. 具体的操作步骤如下 第一步:在cordova项目下安装cordova-plugin-camera插件 c ...

最新文章

  1. RotateAnimation详解
  2. python编程15讲答案,[Python编程:从入门到实践] 第十五章:生成数据 习题答案
  3. 抓到一只苍蝇 writeup
  4. 基因共表达聚类分析及可视化
  5. 把你的项目升级到IE8
  6. Flutter 登录页面Demo 复制可使用
  7. php的类图怎么生成_PHP网站怎么划UML类图?
  8. 精通HTML5+CSS3需要学什么?
  9. 《上市公司信息披露电子化规范》简介
  10. 数据结构顺序表的查找_数据结构1|顺序表+链表
  11. UVA10534 Wavio Sequence【LIS+DP】
  12. java.util.concurrent.atomic.AtomicBoolean 源码
  13. java 不同时区时间转换_Java中的时区转换小结
  14. 高等数学第七版同济大学课后习题讲解下册 pdf(免费)
  15. 用例图、功能模块图和数据库的区别
  16. AI语音机器人有哪些需要注意事项
  17. 华为手机多屏互动功能使用
  18. 横版射击,王者归来|Cocos精品《合金弹头OL》
  19. 电视端虚拟鼠标的设计
  20. antDesign 修改日历(Calendar) 的一二三四五六日为周一周X格式

热门文章

  1. Dubbo 本地存根
  2. java tcp ack_TCP三次握手和四次挥手以及11种状态
  3. 我的世界rpg服务器背包位置,我的世界:如何识别MC老玩家?看他背包中有没有这五种道具...
  4. SpringBoot+拦截器+自定义异常+自定义注解+全局异常处理简单实现接口权限管理...
  5. Kubernetes 上对应用程序进行故障排除的 6 个技巧
  6. Java多线程学习二十六:原子类是如何利用 CAS 保证线程安全的?
  7. SQL 查询笔记:子查询,分组查询,左连接查询。。。。。
  8. php登录 cookie,使用cookie进行简单的PHP登录
  9. deepin安装tomcat
  10. Java随机数与定时器