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 相关文章推荐
jQuery的实现原理的模拟代码 -3 事件处理
Aug 03 Javascript
js获取php变量的实现代码
Aug 10 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
Mar 04 Javascript
JavaScript仿商城实现图片广告轮播实例代码
Feb 06 Javascript
javascript常见数字进制转换实例分析
Apr 21 Javascript
基于JS模仿windows文件按名称排序效果
Jun 29 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
Nov 21 Javascript
vue-cli+webpack项目 修改项目名称的方法
Feb 28 Javascript
在vue中使用express-mock搭建mock服务的方法
Nov 07 Javascript
简单的React SSR服务器渲染实现
Dec 11 Javascript
浅谈JavaScript中等号、双等号、 三等号的区别
Aug 06 Javascript
详解uniapp的全局变量实现方式
Jan 11 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
jQuery 源码分析笔记
2011/05/25 PHP
PHP变量内存分配问题记录整理
2013/11/27 PHP
PHP中使用CURL模拟登录并获取数据实例
2014/07/01 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
PHP实现创建微信自定义菜单的方法示例
2017/07/14 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
2020/01/23 PHP
window.onload 加载完毕的问题及解决方案(上)
2009/07/09 Javascript
JavaScript判断访问的来源是手机还是电脑,用的哪种浏览器
2013/12/12 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
2017/01/03 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
2018/09/03 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
layer 关闭指定弹出层的例子
2019/09/25 Javascript
详解Python中映射类型(字典)操作符的概念和使用
2015/08/19 Python
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
Python使用sftp实现上传和下载功能(实例代码)
2017/03/14 Python
python如何获取服务器硬件信息
2017/05/11 Python
python编程羊车门问题代码示例
2017/10/25 Python
Python编程之gui程序实现简单文件浏览器代码
2017/12/08 Python
Python实现的在特定目录下导入模块功能分析
2019/02/11 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
python爬虫智能翻页批量下载文件的实例详解
2021/02/02 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
苏格兰在线威士忌商店:The Whisky Barrel
2019/05/07 全球购物
计算机专业学生求职信分享
2013/12/15 职场文书
岳父生日宴会答谢词
2014/01/13 职场文书
幼儿园教师教学反思
2014/02/06 职场文书
2014法制宣传日活动总结范文
2014/11/01 职场文书
新郎结婚保证书
2015/02/26 职场文书
告诉你创业计划书的8个实用技巧
2019/07/12 职场文书
详解Mysql和Oracle之间的误区
2021/05/18 MySQL