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中的数学函数
Apr 04 Javascript
Js动态创建div
Sep 25 Javascript
Javascript 面向对象(三)接口代码
May 23 Javascript
js取消单选按钮选中并判断对象是否为空
Nov 14 Javascript
基于jQuery的图片不完全按比例自动缩小
Jul 11 Javascript
js实现具有高亮显示效果的多级菜单代码
Sep 01 Javascript
简单对比分析JavaScript中的apply,call与this的使用
Dec 04 Javascript
Ionic2开发环境搭建教程
Aug 20 Javascript
利用jqgrid实现上移下移单元格功能
Nov 07 Javascript
微信小程序云开发之数据库操作
May 18 Javascript
layui-table获得当前行的上/下一行数据的例子
Sep 24 Javascript
Vue Cli3 打包配置并自动忽略console.log语句的方法
Apr 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三层结构(上) 简单三层结构
2010/07/04 PHP
PHP OPCode缓存 APC详细介绍
2010/10/12 PHP
Centos6.5和Centos7 php环境搭建方法
2016/05/27 PHP
php一个文件搞定微信jssdk配置
2016/12/12 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
鼠标图片振动代码
2006/07/06 Javascript
在 IE 中调用 javascript 打开 Excel 表
2006/12/21 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
jQuery Clone Bug解决代码
2010/12/22 Javascript
js中直接声明一个对象的方法
2014/08/10 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
JavaScript中this的四个绑定规则总结
2016/09/26 Javascript
JS控制TreeView的结点选择
2016/11/11 Javascript
利用JS实现简单的日期选择插件
2017/01/23 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
2019/03/04 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
JS实现轮播图效果
2020/01/11 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
[01:00:53]OG vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python 错误和异常小结
2013/10/09 Python
python ddt实现数据驱动
2018/03/14 Python
kafka-python批量发送数据的实例
2018/12/27 Python
Python学习笔记之视频人脸检测识别实例教程
2019/03/06 Python
如何在python中实现随机选择
2019/11/02 Python
python与idea的集成的实现
2020/11/20 Python
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
应届医学毕业生求职信分享
2013/12/02 职场文书
庆祝国庆节标语
2014/10/09 职场文书
Python编程源码报错解决方法总结经验分享
2021/10/05 Python
教你使用Ubuntu搭建DNS服务器
2022/09/23 Servers