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 图片预加载 自动等比例缩放插件
Dec 25 Javascript
精通Javascript系列之数值计算
Jun 07 Javascript
中国地区三级联动下拉菜单效果分析
Nov 15 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
Feb 02 Javascript
JQuery中extend使用介绍
Mar 13 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
Dec 09 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
Jan 29 Javascript
AngularJS学习笔记之依赖注入详解
May 16 Javascript
Vue 创建组件的两种方法小结(必看)
Feb 23 Javascript
NestJs 静态目录配置详解
Mar 12 Javascript
微信小程序实现禁止分享代码实例
Oct 19 Javascript
js实现div色块碰撞
Jan 16 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的ob_start();控制您的浏览器cache!
2006/11/25 PHP
phplock(php进程锁) v1.0 beta1
2009/11/24 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
thinkPHP实现签到功能的方法
2017/03/15 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
2019/10/11 PHP
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
JS实现简单的图书馆享元模式实例
2015/06/30 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
原生JavaScript实现精美的淘宝轮播图效果示例【附demo源码下载】
2017/05/27 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
2018/09/03 Javascript
Vue实现表格中对数据进行转换、处理的方法
2018/09/06 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
微信小程序仿淘宝热搜词在搜索框中轮播功能
2020/01/21 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
浅析Python的web.py框架中url的设定方法
2016/07/11 Python
python如何统计代码运行的时长
2019/07/24 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
Python读取VOC中的xml目标框实例
2020/03/10 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
2020/05/13 Python
html5 更新图片颜色示例代码
2014/07/29 HTML / CSS
New Balance美国官网:运动鞋和健身服装
2017/04/11 全球购物
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
linux面试题参考答案(10)
2013/11/04 面试题
优秀老师事迹材料
2014/02/05 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
个人借款协议书范本
2014/11/17 职场文书
2015年科室工作总结
2015/04/10 职场文书
MySQL去除密码登录告警的方法
2022/04/20 MySQL