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居然支持中文(unicode)编程!
Apr 12 Javascript
javascript 复杂的嵌套环境中输出单引号和双引号
May 26 Javascript
jQuery Mobile 导航栏代码
Nov 01 Javascript
JS去除iframe滚动条的方法
Apr 01 Javascript
基于jQuery实现仿QQ空间送礼物功能代码
May 24 Javascript
基于angularjs实现图片放大镜效果
Aug 31 Javascript
JavaScript中Math对象的方法介绍
Jan 05 Javascript
js获取浏览器的各种属性
Apr 27 Javascript
如何使用vuex实现兄弟组件通信
Nov 02 Javascript
用VsCode编辑TypeScript的实现方法
May 07 Javascript
jQuery实现可以计算进制转换的计算器
Oct 19 jQuery
jquery实现图片放大镜效果
Dec 23 jQuery
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
Ajax PHP简单入门教程代码
2008/04/25 PHP
php 流程控制switch的简单实例
2016/06/07 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
2020/04/04 PHP
一段实时更新的时间代码
2006/07/07 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
javascript实现动态导入js与css等静态资源文件的方法
2015/07/25 Javascript
功能强大的Bootstrap使用手册(一)
2016/08/02 Javascript
浅析JavaScript函数的调用模式
2016/08/10 Javascript
微信开发 使用picker封装省市区三级联动模板
2016/10/28 Javascript
ligerUI---ListBox(列表框可移动的实例)
2017/11/28 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
2019/06/24 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
[03:09]显微镜下的DOTA2第一期——带你走进华丽的DOTA2世界
2014/06/20 DOTA
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
python 全文检索引擎详解
2017/04/25 Python
python实现手机销售管理系统
2019/03/19 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
简单了解python中的与或非运算
2019/09/18 Python
利用Python产生加密表和解密表的实现方法
2019/10/15 Python
Python扫描端口的实现
2021/01/25 Python
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
HTML5 Canvas阴影使用方法实例演示
2013/08/02 HTML / CSS
荷兰睡眠专家:Beter Bed
2020/11/23 全球购物
班会关于环保演讲稿
2013/12/29 职场文书
最新大学职业规划书范文
2013/12/30 职场文书
金融专业大学生职业生涯规划范文
2014/01/16 职场文书
工作决心书范文
2014/03/11 职场文书
2014年质量管理工作总结
2014/12/01 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书
大学班干部竞选稿
2015/11/20 职场文书
Go语言带缓冲的通道实现
2021/04/26 Golang
使用springMVC所需要的pom配置
2021/09/15 Java/Android