vue自定义指令实现方法详解


Posted in Javascript onFebruary 11, 2019

本文实例讲述了vue自定义指令实现方法。分享给大家供大家参考,具体如下:

vue中的指令就是v-on v-bind v-show等等,那么自定义指令是什么呢?

自己定义的指令就是自定义指令。

语法:

Vue.directive(id, definition)

这里可以参考vue中的指令

<h1 v-if="yes">Yes</h1> 其中,if就是指令ID,yes是expression

Vue.directive()传入接受两个参数,id是指指令ID,definition是指定义对象。其中,定义对象可以提供一些钩子函数。

钩子函数:

  • bind

- inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。

  • update
  • componentUpdated

    unbind

钩子函数参数

  • el:指令所绑定的元素,可以用来直接操作 DOM 。
  • binding:一个对象,包含以下属性:

比如 name, value ,expression ,rawName等等

为了更好的操作DOM

例子如下,让p标签的颜色变成红色。给p标签加入了v-color 的自定义指令。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <p v-color="red">我是自定义指令</p> red绑定到data里面的变量
    <p v-color="'blue'">我是自定义指令</p> 也支持字符串
  </div>
<script src='vue.js'></script>
<script>
  // 注册一个全局的自定义指令
  Vue.directive('color', {
   inserted: function (el,binding) {
    console.log(el,binding)
    el.style.color = binding.value
   }
  })
  new Vue({
    el:'#app',
    data:{
      red:'red'
    }
  })
</script>
</body>
</html>

局部注册例子

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <p v-color="red">我是自定义指令</p>
  </div>
<script src='vue.js'></script>
<script>
  new Vue({
    el:'#app',
    data:{
      red:'red'
    },
    directives: {
     color: {
      // 指令的定义
      inserted: function (el,binding) {
       el.style.color = binding.value
      }
     }
    }
  })
</script>
</body>
</html>

比如给侧边栏做一个鼠标滚轮事件。

但是,这样需要兼容写法,粗暴的给元素添加onmousewheel是不对的,因为在火狐浏览器下根本不会执行。

怎么办?

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    #scrollwrap {
      width:200px;
      height:800px;
      background: #ccc;
    }
  </style>
</head>
<body>
  <div id="app">
    <div id="scrollwrap" v-scrollfn="mousewheel">我是侧边栏</div>
  </div>
<script src='vue.js'></script>
<script>
  new Vue({
    el:'#app',
    data:{
      red:'red',
      mousewheel: '滚轮事件'
    },
    directives: {
     scrollfn: {
      // 指令的定义
      inserted: function (el,binding) {
       var userAgent = window.navigator.userAgent
       // 通过userAgent拿到
       if (userAgent.indexOf('Firefox')> -1) {
        console.log('是火狐浏览器')
        el.addEventListener('DOMMouseScroll',function (e){
         console.log(e.detail)
        })
       } else {
        console.log('不是火狐')
        el.addEventListener('mousewheel',function (e){
         console.log(e.wheelDelta)
        })
       }
      }
     }
    }
  })
</script>
</body>
</html>

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
JavaScript confirm选择判断
Oct 18 Javascript
浅析jquery unbind()方法移除元素绑定的事件
May 24 Javascript
JavaScript 数组的深度复制解析
Nov 02 Javascript
详解React中的组件通信问题
Jul 31 Javascript
javascript中神奇的 Date对象小结
Oct 12 Javascript
深入浅析Vue中的 computed 和 watch
Jun 06 Javascript
webpack项目轻松混用css module的方法
Jun 12 Javascript
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
Sep 27 Javascript
ES6基础之数组和对象的拓展实例详解
Aug 22 Javascript
vue项目中引入Sass实例方法
Aug 27 Javascript
JS typeof fn === 'function' &amp;&amp; fn()详解
Aug 22 Javascript
vue前端工程的搭建
Mar 31 Vue.js
Vue表情输入组件 微信face表情组件
Feb 11 #Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
Feb 10 #Javascript
Vue动画事件详解及过渡动画实例
Feb 09 #Javascript
JavaScript ES6常用基础知识总结
Feb 09 #Javascript
Vue组件的使用及个人理解与介绍
Feb 09 #Javascript
Vue自定义指令写法与个人理解
Feb 09 #Javascript
Vue指令指令大全
Feb 09 #Javascript
You might like
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
php线性表的入栈与出栈实例分析
2015/06/12 PHP
PHP生成腾讯云COS接口需要的请求签名
2018/05/20 PHP
JavaScript 以对象为索引的关联数组
2010/05/19 Javascript
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
Flexigrid在IE下不显示数据的有效处理方法
2014/09/04 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
jQuery实现伪分页的方法分享
2016/02/17 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
QRCode.js:基于JQuery的生成二维码JS库的使用
2017/06/23 jQuery
解析Vue2 dist 目录下各个文件的区别
2017/11/22 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
2019/03/05 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
Python读取指定目录下指定后缀文件并保存为docx
2017/04/23 Python
Python实现Smtplib发送带有各种附件的邮件实例
2017/06/05 Python
python内置函数:lambda、map、filter简单介绍
2017/11/16 Python
Python实现图片批量加入水印代码实例
2019/11/30 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
python中format函数如何使用
2020/06/22 Python
python如何实时获取tcpdump输出
2020/09/16 Python
全面解析HTML5中的标准属性与自定义属性
2016/02/18 HTML / CSS
乡镇三项教育实施方案
2014/03/30 职场文书
捐献物资倡议书范文
2014/05/19 职场文书
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
环卫工作汇报材料
2014/10/28 职场文书
2014年保卫部工作总结
2014/11/21 职场文书
美容院员工规章制度
2015/08/05 职场文书
NodeJs内存占用过高的排查实战记录
2021/05/10 NodeJs