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.ui.draggable中文文档
Nov 24 Javascript
基于jquery实现点击左右按钮图片横向滚动
Apr 11 Javascript
JavaScript操作Oracle数据库示例
Mar 06 Javascript
JavaScript脚本判断蜘蛛来源的方法
Sep 22 Javascript
一道关于JavaScript变量作用域的面试题
Mar 08 Javascript
网页瀑布流布局jQuery实现代码
Oct 21 Javascript
prototype与__proto__区别详细介绍
Jan 09 Javascript
vue如何在自定义组件中使用v-model
May 14 Javascript
react 兄弟组件如何调用对方的方法示例
Oct 23 Javascript
VUE前后端学习tab写法实例
Aug 06 Javascript
基于better-scroll 实现歌词联动功能的代码
May 07 Javascript
微信小程序自定义支持图片的弹窗
Dec 21 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
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
解析php 版获取重定向后的地址(代码)
2013/06/26 PHP
浅析php变量作用域的一些问题
2013/08/08 PHP
PHP解析目录路径的3个函数总结
2014/11/18 PHP
深入浅析php json 格式控制
2015/12/24 PHP
PHP的swoole扩展安装方法详细教程
2016/05/18 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
thinkphp验证码的实现(form、ajax实现验证)
2016/07/28 PHP
详解php中的implements 使用
2017/06/13 PHP
php curl发送请求实例方法
2019/08/01 PHP
tp5框架使用cookie加密算法实现登录功能示例
2020/02/10 PHP
Javascript 判断是否存在函数的方法
2013/01/03 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
nodejs async异步常用函数总结(推荐)
2017/11/17 NodeJs
JavaScript防止全局变量污染的方法总结
2018/08/02 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
laypage+SpringMVC实现后端分页
2019/07/27 Javascript
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
详细分析Node.js 模块系统
2020/06/28 Javascript
实例讲解React 组件
2020/07/07 Javascript
[01:18:31]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第一场 1月10日
2021/03/11 DOTA
Python操作列表的常用方法分享
2014/02/13 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
Python通过for循环理解迭代器和生成器实例详解
2019/02/16 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
Python并发爬虫常用实现方法解析
2020/11/19 Python
浅谈css3中calc在less编译时被计算的解决办法
2017/12/04 HTML / CSS
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
世界顶级户外运动品牌折扣网站:LeftLane Sports
2019/06/12 全球购物
2014年护理部工作总结
2014/11/14 职场文书
请客吃饭开场白
2015/06/01 职场文书
公司新员工欢迎词
2015/09/30 职场文书
创业计划书之川味火锅店
2019/09/02 职场文书
opencv-python图像配准(匹配和叠加)的实现
2021/06/23 Python