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 相关文章推荐
JQuery 插件制作实践 xMarquee插件V1.0
Apr 02 Javascript
jQuery ui插件的使用方法代码实例
May 08 Javascript
jQuery表单美化插件jqTransform使用详解
Apr 12 Javascript
js图片轮播效果实现代码
Apr 18 Javascript
jquery转盘抽奖功能实现
Nov 13 Javascript
jQuery插件支持同一页面被多次调用
Feb 14 Javascript
jQuery实现选项联动轮播效果【附实例】
Apr 19 Javascript
IE8兼容Jquery.validate.js的问题
Dec 01 Javascript
jQuery表格的维护和删除操作
Feb 03 Javascript
使用jQuery和ajax代替iframe的方法(详解)
Apr 12 jQuery
vue实现Input输入框模糊查询方法
Jan 29 Javascript
vue如何在data中引入图片的正确路径
Jun 05 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
PHP语法速查表
2007/01/02 PHP
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
php命令行写shell实例详解
2018/07/19 PHP
详细分析PHP 命名空间(namespace)
2020/06/30 PHP
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
2010/12/11 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
详解vue中this.$emit()的返回值是什么
2019/04/07 Javascript
浅谈Vue中render中的h箭头函数
2019/11/07 Javascript
vue axios封装httpjs,接口公用配置拦截操作
2020/08/11 Javascript
解决vue prop传值default属性如何使用,为何不生效的问题
2020/09/21 Javascript
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
Python三元运算实现方法
2015/01/12 Python
transform python环境快速配置方法
2018/09/27 Python
在Pycharm中设置默认自动换行的方法
2019/01/16 Python
python实现学员管理系统
2019/02/26 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
简述DNS进行域名解析的过程
2013/12/02 面试题
护士辞职信范文
2014/01/19 职场文书
运动会广播稿200米
2014/01/27 职场文书
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
物业公司的岗位任命书
2014/06/06 职场文书
婚前协议书标准版
2014/10/19 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书