Vue.js自定义指令学习使用详解


Posted in Javascript onOctober 19, 2019

自定义指令

自定义指令的注册方法和组件很像,也分全局注册和局部注册,比如注册一个v-focus指令用于在<input>、<textarea>元素初始化时自动获得焦点,共有两种写法:

//全局注册
Vue.directive('focus',{
 //指令选项
});


//局部注册
var app = new Vue({
 el: '#app',
 directive: {
 focus: {
 //指令选项
 }
 }
});

自定义指令的选项是由几个钩子函数组成的,每个都是可选的。

自定义指令的各个选项如下:

  • bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。
  • inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必在于document中)。
  • update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新。
  • componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。
  • unbind: 只调用一次,指令与元素解绑时调用。

可以根据需求在不同的钩子函数内完成逻辑代码,例如上面的v-focus,我们希望在元素插入父节点时就调用,那用到的最好是inserted。

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <script src="https://unpkg.com/vue/dist/vue.js"></script>
 <title>自定义指令</title>
</head>
<body>
 <div id="app">
 <input type="text" v-focus>
 </div>
 <script>
 Vue.directive('focus',{
  inserted: function (el) {
  //聚焦元素
  el.focus();
  }
 });

 var app = new Vue({
  el: '#app'
 });
 </script>
</body>
</html>

Vue.js自定义指令学习使用详解

每个钩子函数都有几个参数可用,具体如下:

  • el: 指令所绑定的元素,可以用来直接操作DOM
  • binding: 一个对象,包含以下属性:

    name:指令名,不包括v-前缀
    valule:指令的绑定值,例如v-my-directive=“1 + 1”,value的值是2
    oldValue:指令绑定的前一个值,仅在update和componentUpdated钩子中可用。无论值是否改变都可用
    expression:绑定值的字符串形式。例如v-my-directive=“1 + 1”,expression的值是”1 + 1“
    arg:传给指令的参数。例如v-my-directive:foo,arg的值是foo
    modifiers:一个包含修饰符的对象。例如v-my-directive.foo.bar,修饰符对象modifiers的值是{ foo:true, bar:true}

  • vnode: Vue编译生成的虚拟节点。
  • oldVnode: 上一个虚拟节点仅在update和componentUpdated钩子中可用。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <script src="https://unpkg.com/vue/dist/vue.js"></script>
 <title>自定义指令</title>
</head>
<body>
 <div id="app">
 <div v-test:msg.a.b="message"></div>
 </div>
 <script>
 Vue.directive('test',{
  bind: function (el, binding, vnode) {
  var keys = [];
  for(var i in vnode){
   keys.push(i);
  }
  el.innerHTML = 
   'name:' + binding.name + '<br/>' +
   'value:' + binding.value + '<br/>' +
   'expression:' + binding.expression + '<br/>' +
   'argument:' + binding.arg + '<br/>' + 
   'modifiers:' + JSON.stringify(binding.modifiers) + '<br/>' + 
   'vnode keys' + keys.join(',');
  }
 });

 var app = new Vue({
  el: '#app',
  data: {
  message: 'some text'
  }
 });
 </script>
</body>
</html>

Vue.js自定义指令学习使用详解

更多教程点击《Vue.js前端组件学习教程》,欢迎大家学习阅读。

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 编写规范
Mar 03 Javascript
JavaScript数据类型详解
Apr 01 Javascript
跟我学习javascript的prototype原型和原型链
Nov 18 Javascript
使用jQuery制作基础的Web图片轮播效果
Apr 22 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
Jun 13 Javascript
基于jQuery实现Accordion手风琴自定义插件
Oct 13 Javascript
web前端vue filter 过滤器
Jan 12 Javascript
详解Ubuntu安装angular-cli遇到的坑
Sep 08 Javascript
详解vue+axios给开发环境和生产环境配置不同的接口地址
Aug 16 Javascript
node 解析图片二维码的内容代码实例
Sep 11 Javascript
vue相关配置文件详解及多环境配置详细步骤
May 19 Javascript
浅谈vue-props的default写不写有什么区别
Aug 09 Javascript
Vue.js标签页组件使用方法详解
Oct 19 #Javascript
基于JavaScript获取base64图片大小
Oct 18 #Javascript
react MPA 多页配置详解
Oct 18 #Javascript
vue滚动插件better-scroll使用详解
Oct 18 #Javascript
VUE实现密码验证与提示功能
Oct 18 #Javascript
VUE实现图片验证码功能
Nov 18 #Javascript
countUp.js实现数字滚动效果
Oct 18 #Javascript
You might like
php 抽象类的简单应用
2011/09/06 PHP
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
PHP下的浮点运算不准的解决方法
2016/10/27 PHP
cssQuery()的下载与使用方法
2007/01/12 Javascript
JavaScript中的闭包原理分析
2010/03/08 Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
2013/02/01 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
2014/11/28 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
2016/02/22 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
javascript简易画板开发
2020/04/12 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
微信小程序保存多张图片的实现方法
2019/03/05 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
2020/07/10 Javascript
Python编码时应该注意的几个情况
2013/03/04 Python
python中wx将图标显示在右下角的脚本代码
2013/03/08 Python
wxPython之解决闪烁的问题
2018/01/15 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
2019/02/19 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
Python 实现打印单词的菱形字符图案
2020/04/12 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
2020/07/13 Python
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
2014年教师培训的自我评价
2014/01/03 职场文书
2014年五一促销活动方案
2014/03/09 职场文书
《云房子》教学反思
2014/04/20 职场文书
社区志愿者活动总结
2014/06/26 职场文书
春季运动会加油词
2015/07/18 职场文书
2016优秀青年志愿者事迹材料
2016/02/25 职场文书