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 相关文章推荐
用JavaScrpt实现文件夹简单轻松加密的实现方法图文
Sep 08 Javascript
javascript parseInt 大改造
Sep 27 Javascript
Jquery练习之表单验证实现代码
Dec 14 Javascript
浅析jQuery1.8的几个小变化
Dec 10 Javascript
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
Aug 18 Javascript
JavaScript常用字符串与数组扩展函数小结
Apr 24 Javascript
基于js文件加载优化(详解)
Jan 03 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
Feb 21 Javascript
vue 监听某个div垂直滚动条下拉到底部的方法
Sep 15 Javascript
vue项目打包之后背景样式丢失的解决方案
Jan 17 Javascript
vue中datepicker的使用教程实例代码详解
Jul 08 Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
Apr 13 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中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
PHP中的替代语法介绍
2015/01/09 PHP
JavaScript confirm选择判断
2008/10/18 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
理解JavaScript表单的基础知识
2016/01/25 Javascript
浅述Javascript的外部对象
2016/12/07 Javascript
ubuntu编译nodejs所需的软件并安装
2017/09/12 NodeJs
Nodejs实现爬虫抓取数据实例解析
2018/07/05 NodeJs
使用JS获取页面上的所有标签
2018/10/18 Javascript
使用Vue.observable()进行状态管理的实例代码详解
2019/05/26 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
详解K-means算法在Python中的实现
2017/12/05 Python
基于python实现聊天室程序
2018/07/27 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
python实现抽奖小程序
2020/04/15 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
详解Python文件修改的两种方式
2019/08/22 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
python 怎样将dataframe中的字符串日期转化为日期的方法
2019/09/26 Python
dpn网络的pytorch实现方式
2020/01/14 Python
python3 实现口罩抽签的功能
2020/03/11 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
animation和transition的区别
2020/10/12 HTML / CSS
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2014/01/19 面试题
毕业生幼师求职自荐信
2013/10/01 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
教师节主持词开场白
2015/05/29 职场文书
新员工入职感想
2015/08/07 职场文书
python实现简单的名片管理系统
2021/04/26 Python
Python利用机器学习算法实现垃圾邮件的识别
2021/06/28 Python
纯html+css实现打字效果
2021/08/02 HTML / CSS