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 相关文章推荐
两个listbox实现选项的添加删除和搜索
Mar 01 Javascript
jquery得到font-size属性值实现代码
Sep 30 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
Apr 17 Javascript
javascript 中的事件委托详解
Oct 25 Javascript
Bootstrap基本组件学习笔记之导航(10)
Dec 07 Javascript
EditPlus 正则表达式 实战(3)
Dec 15 Javascript
微信小程序 PHP生成带参数二维码
Feb 21 Javascript
手机端转换rem适应
Apr 01 Javascript
JS实现图片预览的两种方式
Jun 27 Javascript
vue之浏览器存储方法封装实例
Mar 15 Javascript
React.js绑定this的5种方法(小结)
Jun 05 Javascript
微信小程序新闻网站详情页实例代码
Jan 10 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中使用sockets:从新闻组中获取文章
2006/10/09 PHP
PHP获取url的函数代码
2011/08/02 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
2015/01/09 PHP
php正则表达式获取内容所有链接
2015/07/24 PHP
yii2超好用的日期组件和时间组件
2016/05/05 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
HTML 自动伸缩的表格Table js实现
2009/04/01 Javascript
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
node.js中的dns.getServers方法使用说明
2014/12/08 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
快速掌握Node.js模块封装及使用
2016/03/21 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
2017/05/12 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
AngularJS自定义过滤器用法经典实例总结
2018/05/17 Javascript
详解webpack import()动态加载模块踩坑
2018/07/17 Javascript
vue的过滤器filter实例详解
2018/09/17 Javascript
Angular PWA使用的Demo示例
2019/01/31 Javascript
python通过zabbix api获取主机
2018/09/17 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
Flask-WTF表单的使用方法
2019/07/12 Python
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
新学期开学寄语
2014/01/18 职场文书
医院总经理岗位职责
2014/02/04 职场文书
项目合作意向书范本
2014/04/01 职场文书
2014购房个人委托书范本
2014/10/12 职场文书
SQL解决未能删除约束问题drop constraint
2022/05/30 SQL Server