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 相关文章推荐
Auntion-TableSort国人写的一个javascript表格排序的东西
Nov 12 Javascript
jqPlot Option配置对象详解
Jul 25 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
Jun 30 Javascript
js语法学习之判断一个对象是否为数组
May 13 Javascript
JavaScript中5种调用函数的方法
Mar 12 Javascript
有关Promises异步问题详解
Nov 13 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
Dec 12 Javascript
JS简单实现表格排序功能示例
Dec 20 Javascript
JS正则替换去空格的方法
Mar 24 Javascript
webpack+react+antd脚手架优化的方法
Apr 02 Javascript
layui 设置table 行的高度方法
Aug 17 Javascript
通过实例解析jQ Ajax操作相关原理
Sep 23 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中动态HTML的输出技术
2006/10/09 PHP
推荐php模板技术[转]
2007/01/04 PHP
PHP实现采集程序原理和简单示例代码
2007/03/18 PHP
PHP加速 eAccelerator配置和使用指南
2009/06/05 PHP
url decode problem 解决方法
2011/12/26 PHP
PHP封装函数实现生成随机的字符串验证码
2017/01/24 PHP
PHP封装的mysqli数据库操作类示例
2019/02/16 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
2020/03/18 PHP
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
初窥JQuery(二)事件机制(2)
2010/12/06 Javascript
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
JQuery Tips相关(1)----关于$.Ready()
2014/08/14 Javascript
JSONP之我见
2015/03/24 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
NodeJS实现同步的方法
2019/03/02 NodeJs
如何使用JavaScript检测空闲的浏览器选项卡
2020/05/28 Javascript
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
Python 实现链表实例代码
2017/04/07 Python
详解python字节码
2018/02/07 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
阿德的梦教学反思
2014/02/06 职场文书
旅游管理专业大学生职业规划书
2014/02/27 职场文书
公开服务承诺制度
2014/03/26 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
检查机关党的群众路线个人整改措施
2014/10/04 职场文书
乡镇领导班子四风整顿行动工作汇报
2014/10/25 职场文书
成都人事代理协议书
2014/10/25 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
团组织关系介绍信
2019/06/24 职场文书
七年级话题作文之执着
2019/11/19 职场文书