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 相关文章推荐
Javascript学习笔记7 原型链的原理
Jan 11 Javascript
JavaScript 以对象为索引的关联数组
May 19 Javascript
详解Javascript中的Object对象
Feb 28 Javascript
javascript移动开发中touch触摸事件详解
Mar 18 Javascript
JavaScript Uploadify文件上传实例
Feb 28 Javascript
Vue.js 2.0学习教程之从基础到组件详解
Apr 24 Javascript
利用vue+elementUI实现部分引入组件的方法详解
Nov 22 Javascript
使用svg实现动态时钟效果
Jul 17 Javascript
VUE搭建手机商城心得和遇到的坑
Feb 21 Javascript
Vue 使用formData方式向后台发送数据的实现
Apr 14 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
Jul 17 Javascript
ant design vue的form表单取值方法
Jun 01 Vue.js
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 htmlspecialchars加强版
2010/02/16 PHP
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
PHP实现文件上传与下载实例与总结
2016/03/13 PHP
简单实现php上传文件功能
2017/09/21 PHP
关于js类的定义
2011/06/28 Javascript
javascript中length属性的探索
2011/07/31 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
关于IE BUG与字符串截取substr的解决办法
2013/04/10 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
javascript中Date对象的getDay方法使用指南
2014/12/22 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
使用ECharts实现状态区间图
2018/10/25 Javascript
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
React+Antd+Redux实现待办事件的方法
2019/03/14 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
[54:08]LGD女子刀塔学院 DOTA2炼金术士教学
2014/01/09 DOTA
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
[01:24]DOTA2上海特锦赛OG战队抵达 专车接机入驻总统套房
2016/02/23 DOTA
django+js+ajax实现刷新页面的方法
2017/05/22 Python
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
python基础教程项目五之虚拟茶话会
2018/04/02 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
python判断输入日期为第几天的实例
2018/11/13 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
python中@property和property函数常见使用方法示例
2019/10/21 Python
python实现连连看游戏
2020/02/14 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
2020/06/22 Python
python3.5的包存放的具体路径
2020/08/16 Python
党员干部承诺书范文
2014/03/25 职场文书
导游词之南京莫愁湖公园
2019/11/13 职场文书
python实现自动化群控的步骤
2021/04/11 Python
python 中的@运算符使用
2021/05/26 Python