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 相关文章推荐
jQuery toggle()设置CSS样式
Nov 05 Javascript
JavaScript将Table导出到Excel实现思路及代码
Mar 13 Javascript
js简单的表格添加行和删除行操作示例
Mar 31 Javascript
DOM基础教程之使用DOM + Css
Jan 20 Javascript
jQuery超赞的评分插件(8款)
Aug 20 Javascript
javascript Slip.js实现整屏滑动的手机网页
Nov 25 Javascript
Document.body.scrollTop的值总为零的快速解决办法
Jun 09 Javascript
很棒的一组js图片轮播特效
Jan 12 Javascript
浅谈angularjs依赖服务注入写法的注意点
Apr 24 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
Sep 20 Javascript
layui监听select变化,以及设置radio选中的方法
Sep 24 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
Jun 05 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中显示格式化的用户输入
2006/10/09 PHP
php简单封装了一些常用JS操作
2007/02/25 PHP
php htmlspecialchars加强版
2010/02/16 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
学习ExtJS border布局
2009/10/08 Javascript
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
node.js缺少mysql模块运行报错的解决方法
2016/11/13 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
微信小程序图片轮播组件gallery slider使用方法详解
2018/01/31 Javascript
nodejs读取并去重excel文件
2018/04/22 NodeJs
JavaScript控制浏览器全屏显示简单示例
2018/07/05 Javascript
JS+HTML实现的圆形可点击区域示例【3种方法】
2018/08/01 Javascript
基于Koa2写个脚手架模拟接口服务的方法
2018/11/27 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
vue实现路由不变的情况下,刷新页面操作示例
2020/02/02 Javascript
JavaScript中的Proxy对象
2020/11/27 Javascript
[01:50:49]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第三场 1月24日
2021/03/11 DOTA
python正则分组的应用
2013/11/10 Python
跟老齐学Python之用Python计算
2014/09/12 Python
python中的itertools的使用详解
2020/01/13 Python
DNA测试:Orig3n
2019/03/01 全球购物
电子信息专业应届生自荐信
2014/06/04 职场文书
班子四风对照检查材料
2014/08/21 职场文书
2014年师德师风工作总结
2014/11/25 职场文书
教师思想工作总结2015
2015/05/13 职场文书
英语演讲开场白
2015/05/29 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
R9700摩机记
2022/04/05 无线电
海弦WR-800F
2022/04/05 无线电
如何基于python实现单目三维重建详解
2022/06/25 Python