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 相关文章推荐
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
Nov 04 Javascript
js实现字符串的16进制编码不加密
Apr 25 Javascript
对之前写的jquery分页做下升级
Jun 19 Javascript
简介JavaScript中valueOf()方法的使用
Jun 05 Javascript
简单实现异步编程promise模式
Jul 31 Javascript
javascript数字验证的实例代码(推荐)
Aug 20 Javascript
原生Javascript和jQuery做轮播图简单例子
Oct 11 Javascript
Javascript仿京东放大镜的效果
Mar 01 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
Oct 25 Javascript
layer实现关闭弹出层刷新父界面功能详解
Nov 15 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
Dec 13 Javascript
详解基于element的区间选择组件校验(交易金额)
Jan 07 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
PHP使用get_headers函数判断远程文件是否存在的方法
2014/11/28 PHP
php接口数据加密、解密、验证签名
2015/03/12 PHP
Jquery iframe内部出滚动条
2010/02/11 Javascript
javascript 函数及作用域总结介绍
2013/11/12 Javascript
js showModalDialog弹出窗口实例详解
2014/01/07 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
2014/03/05 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
vux-scroller实现移动端上拉加载功能过程解析
2019/10/08 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
vue实现信息管理系统
2020/05/30 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
python做接口测试的必要性
2019/11/20 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
详解CSS3选择器:nth-child和:nth-of-type之间的差异
2017/09/18 HTML / CSS
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
美国专注于健康商品的网站:eVitamins
2017/01/23 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
进程的查看和调度分别使用什么命令
2015/03/25 面试题
管理失职检讨书
2014/02/12 职场文书
论文诚信承诺书
2014/05/23 职场文书
廉政教育的心得体会
2014/09/01 职场文书
春节慰问简报
2015/07/21 职场文书
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL