Vue自定义指令封装节流函数的方法示例

 更新时间:2018年07月09日 11:09:22   作者:勇PAN高峰  
本篇文章主要介绍了Vue自定义指令封装节流函数的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

节流函数是web前端开发中经常用到的一个开发技巧,在input实时搜索,滚动事件等,为了避免过多消耗性能,我们都会使用节流函数.在《JavaScript高级程序设计》一书中有这样的一个例子:

function throttle (method, context) {
  clearTimeout((method.tId))
  method.tId = setTimeout(function () {
   method.call(context)
  }, 100)
 }

 function resizeDiv () {
  var div = document.getElementById('myDiv')
  div.style.height = div.offsetWidth + 'px'
 }

 window.onresize = function () {
  throttle(resizeDiv)
 }

这个就是很典型的函数节流的应用,不多解释,本文通过vue的自定义指令封装类似的方法.

 <template>
 <div>
  <input
   type="text"
   v-model="text"
   v-debounce="search"
  >
 </div>
</template>
<script>
 export default {
  name: 'debounce',
  data () {
   return {
    msg: 'Welcome to Your Vue.js App',
    text: '',
    count: 1
   }
  },
  directives: {
   debounce: {
    inserted: function (el, binding) {
     let timer
     el.addEventListener('keyup', () => {
      if (timer) {
       clearTimeout(timer)
      }
      timer = setTimeout(() => {
       binding.value()
      }, 300)
     })
    }
   }
  },
  methods: {
   search () {
   // 实际要进行的操作 axios.get('')之类的
    this.count++
    console.log('count is:' + this.count)
   }
  }
 }
</script>

以上代码实现了一个实时搜索类的函数节流,通过vue自定义指令v-debounce实现.原本,如果我们想做一个实施搜索,那么会直接用@keyup=search,这样就会非常耗性能,键盘敲一下,就会调用一次search事件,如果是ajax请求,那么会非常不友好,所以通过v-debounce,则可以在键盘连续敲击的时候组织运行,停留300毫秒才执行.

通过vue的自定义指令,还可以将其挂载在全局,那样就能全局通过v-debounce调用了.这个比传统方法简单很多,不需要call,apply之类的.

关键点:vue 的自定义指令传递的参数binding 如果是一个函数,则通过binding.value()来执行,通过上述示例,还可以传递比如事件, 绑定对象之类的,上例绑定的是el, keyup事件,这些也可以通过binding传递,通过vue的自定义指令,可以简化很多重复代码,并且逻辑更加清晰

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • vue源码之首次渲染过程详解

    vue源码之首次渲染过程详解

    这篇文章主要为大家详细介绍了vue源码之首次渲染过程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • JS 函数的 call、apply 及 bind 超详细方法

    JS 函数的 call、apply 及 bind 超详细方法

    这篇文章主要描述JS 函数的 call、apply 及 bind 方法的超详细解说,感兴趣的朋友可以参考下文,希望能帮助到您
    2021-08-08
  • vite中的glob-import批量导入的实现

    vite中的glob-import批量导入的实现

    本文主要介绍了vite中的glob-import批量导入的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • vue+elementUI(el-upload)图片压缩,默认同比例压缩操作

    vue+elementUI(el-upload)图片压缩,默认同比例压缩操作

    这篇文章主要介绍了vue+elementUI(el-upload)图片压缩,默认同比例压缩操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • vue项目中axios的封装请求

    vue项目中axios的封装请求

    这篇文章主要介绍了vue项目中axios的封装请求,axios 是一个轻量的HTTP客户端,它基于 XMLHttpRequest 服务来执行 HTTP 请求,支持丰富的配置,下文更多详细资料,需要的朋友可以参考一下
    2022-03-03
  • 基于Vue SEO的四种方案(小结)

    基于Vue SEO的四种方案(小结)

    这篇文章主要介绍了基于Vue SEO的四种方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Electron-vue开发的客户端支付收款工具的实现

    Electron-vue开发的客户端支付收款工具的实现

    这篇文章主要介绍了Electron-vue开发的客户端支付收款工具的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • vue中使用gantt-elastic实现可拖拽甘特图的示例代码

    vue中使用gantt-elastic实现可拖拽甘特图的示例代码

    这篇文章主要介绍了vue中使用gantt-elastic实现可拖拽甘特图,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • elementui[el-table]toggleRowSelection默认多选事件无法选中问题

    elementui[el-table]toggleRowSelection默认多选事件无法选中问题

    这篇文章主要介绍了elementui[el-table]toggleRowSelection默认多选事件无法选中问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • vue项目里面引用svg文件并给svg里面的元素赋值

    vue项目里面引用svg文件并给svg里面的元素赋值

    这篇文章主要介绍了vue项目里面引用svg文件并给svg里面的元素赋值,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08

最新评论