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 相关文章推荐
DEFER怎么用?
Jul 01 Javascript
JavaScript的document对象和window对象详解
Dec 30 Javascript
jquery中对于批量deferred的处理方法
Jan 22 Javascript
javascript 动态样式添加的简单实现
Oct 11 Javascript
基于JavaScript实现的顺序查找算法示例
Apr 14 Javascript
解决html input验证只能输入数字,不能输入其他的问题
Jul 21 Javascript
详解vue项目首页加载速度优化
Oct 18 Javascript
使用js获取伪元素的content实例
Oct 24 Javascript
Vue组件中slot的用法
Jan 30 Javascript
mockjs+vue页面直接展示数据的方法
Dec 19 Javascript
9种方法优化jQuery代码详解
Feb 04 jQuery
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
Feb 12 Javascript
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
PHP 一个随机字符串生成代码
2010/05/26 PHP
PHP回溯法解决0-1背包问题实例分析
2015/03/23 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
JavaScript 验证码的实例代码(附效果图)
2013/03/22 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
2014/02/19 Javascript
Nodejs极简入门教程(一):模块机制
2014/10/25 NodeJs
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
JavaScript中rem布局在react中的应用
2015/12/09 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
AngularJS 入门教程之HTML DOM实例详解
2016/07/28 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
微信小程序 image组件遇到的问题
2019/05/28 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
在Python中使用pngquant压缩png图片的教程
2015/04/09 Python
Python类的用法实例浅析
2015/05/27 Python
python保存字符串到文件的方法
2015/07/01 Python
在主机商的共享服务器上部署Django站点的方法
2015/07/22 Python
一张图带我们入门Python基础教程
2017/02/05 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
2018/06/13 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
五分钟学会怎么用python做一个简单的贪吃蛇
2021/01/12 Python
python pillow库的基础使用教程
2021/01/13 Python
突破canvas语法限制 让他支持链式语法
2012/12/24 HTML / CSS
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
百联网上商城:i百联
2017/01/28 全球购物
大学生毕业求职的自我评价
2013/09/29 职场文书
专家推荐信模板
2014/05/09 职场文书
团队激励口号
2014/06/06 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书