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


Posted in Javascript onJuly 09, 2018

节流函数是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的自定义指令,可以简化很多重复代码,并且逻辑更加清晰

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

Javascript 相关文章推荐
心扬JS分页函数代码
Sep 10 Javascript
js页面跳转常用的几种方式
Nov 25 Javascript
jquery获取div距离窗口和父级dv的距离示例
Oct 10 Javascript
JavaScript var声明变量背后的原理示例解析
Oct 12 Javascript
javaScript中slice函数用法实例分析
Jun 08 Javascript
JavaScript的jQuery库中function的存在和参数问题
Aug 13 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
Oct 27 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
Oct 14 Javascript
JavaScript浮点数及运算精度调整详解
Oct 21 Javascript
浅谈Vue-cli 命令行工具分析
Nov 22 Javascript
垃圾回收器的相关知识点总结
May 13 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
Dec 06 Javascript
JavaScript实现创建自定义对象的常用方式总结
Jul 09 #Javascript
vue-cli配置环境变量的方法
Jul 09 #Javascript
JS逻辑运算符短路操作实例分析
Jul 09 #Javascript
微信小程序中时间戳和日期的相互转换问题
Jul 09 #Javascript
使用async await 封装 axios的方法
Jul 09 #Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
Jul 09 #Javascript
jQuery实现简单复制json对象和json对象集合操作示例
Jul 09 #jQuery
You might like
杏林同学录(三)
2006/10/09 PHP
一段php加密解密的代码
2007/07/16 PHP
PHP 读取和修改大文件的某行内容的代码
2009/10/30 PHP
php中引用符号(&amp;)的使用详细介绍
2016/12/06 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
JavaScript 基础问答三
2008/12/03 Javascript
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
2012/08/14 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
javascript中直接引用Microsoft的COM生成Word
2014/01/20 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
关于Iframe父页面与子页面之间的相互调用
2016/11/22 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
2017/05/05 jQuery
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
微信小程序之多文件下载的简单封装示例
2018/01/29 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
2018/05/16 Javascript
JS基于封装函数实现的表格分页完整示例
2018/06/26 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
Python描述器descriptor详解
2015/02/03 Python
python实现在字符串中查找子字符串的方法
2015/07/11 Python
基于Python闭包及其作用域详解
2017/08/28 Python
关于Python数据结构中字典的心得
2017/12/04 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
python多环境切换及pyenv使用过程详解
2019/09/27 Python
Python中包的用法及安装
2020/02/11 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
东方红海科技面试题软件测试方面
2012/02/08 面试题
信息部岗位职责
2013/11/12 职场文书
教育技术职业规划范文
2014/03/04 职场文书
实习报告评语
2014/04/26 职场文书
房产公证书样本
2015/01/23 职场文书