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压缩工具:X2JSCompactor
Jun 13 Javascript
理解Javascript_12_执行模型浅析
Oct 18 Javascript
js每隔5分钟执行一次ajax请求的实现方法
Nov 27 Javascript
node.js中的fs.readFileSync方法使用说明
Dec 15 Javascript
js实现下拉框选择要显示图片的方法
Feb 16 Javascript
Javascript实现计算个人所得税
May 10 Javascript
Javascript实现鼠标右键特色菜单
Aug 04 Javascript
JavaScript必知必会(十) call apply bind的用法说明
Jun 08 Javascript
js实现的光标位置工具函数示例
Oct 03 Javascript
js使用generator函数同步执行ajax任务
Sep 05 Javascript
Javascript通过控制类名更改样式
May 24 Javascript
layer设置maxWidth及maxHeight解决方案
Jul 26 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
做个自己站内搜索引擎
2006/10/09 PHP
用PHP连接Oracle数据库
2006/10/09 PHP
用PHP获取Google AJAX Search API 数据的代码
2010/03/12 PHP
php中把美国时间转为北京时间的自定义函数分享
2014/07/28 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
2015/10/19 PHP
php正则修正符用法实例详解
2016/12/29 PHP
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
禁止按回车键提交表单的方法
2015/06/11 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
2017/01/22 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
Django1.7+python 2.78+pycharm配置mysql数据库
2016/10/09 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
2019/08/19 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
美国网上鞋城:Shoeline.com
2016/11/17 全球购物
加拿大百叶窗和窗帘定制网站:Blinds
2017/01/30 全球购物
法国发饰品牌:Alexandre De Paris
2018/12/04 全球购物
大学生创业计划书的格式要求
2013/12/29 职场文书
《四季》教学反思
2014/04/08 职场文书
2014高考励志标语
2014/06/05 职场文书
学校安全责任书范本
2014/07/23 职场文书
匿名信格式范文
2015/05/27 职场文书
创业计划书之美容店
2019/09/16 职场文书
详解Mysql和Oracle之间的误区
2021/05/18 MySQL
SQLServer RANK() 排名函数的使用
2022/03/23 SQL Server
win11高清晰音频管理器在哪里?win11找不到高清晰音频管理器解决办法
2022/04/08 数码科技