以vue组件或者插件的形式,实现throttle或者debounce

需求

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

实现方式

指令

 
指令
//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) }) }, }, }, 复制代码

组件

  • 子组件





复制代码

父组件


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

  • 函数
function deb(fn: function){
  let lock: number
  return (e) => {
    if (lock){
      clearTimeout(lock)
    }
    console.log('创建闭包延迟执行')
    lock = setTimeout(() => {
      fn(e)
    }, 1500)
  }
}
export {deb}
复制代码

组件内使用



复制代码

你可能感兴趣的:(以vue组件或者插件的形式,实现throttle或者debounce)