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 相关文章推荐
JQUBAR1.1 jQuery 柱状图插件发布
Nov 28 Javascript
javascript实现设置、获取和删除Cookie的方法
Jun 01 Javascript
Javascript自执行匿名函数(function() { })()的原理浅析
May 15 Javascript
AngularJS实用开发技巧(推荐)
Jul 13 Javascript
JavaScript基本类型值-Number类型
Feb 24 Javascript
node.js遍历目录的方法示例
Aug 01 Javascript
node实现socket链接与GPRS进行通信的方法
May 20 Javascript
jqGrid表格底部汇总、合计行footerrow处理
Aug 21 Javascript
vue实现购物车小案例
Sep 27 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
Jul 19 Javascript
JavaScript实现拖动对话框效果的实现代码
Oct 12 Javascript
vue修饰符.capture和.self的区别
Apr 22 Vue.js
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
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
Laravel执行migrate命令提示:No such file or directory的解决方法
2016/03/16 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
通用JS事件写法实现代码
2009/01/07 Javascript
JQUERY 对象与DOM对象之两者相互间的转换
2009/04/27 Javascript
javascript 类型判断代码分析
2010/03/28 Javascript
JavaScript(js)设置默认输入焦点(focus)
2012/12/28 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
JavaScript动态创建div等元素实例讲解
2016/01/06 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
bootstrap 设置checkbox部分选中效果
2017/04/20 Javascript
Three.js基础学习教程
2017/11/16 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
深入Node TCP模块的理解
2019/03/13 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
Django的数据模型访问多对多键值的方法
2015/07/21 Python
利用python爬取散文网的文章实例教程
2017/06/18 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
2020/03/08 Python
让IE下支持Html5的placeholder属性的插件
2014/09/02 HTML / CSS
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
工业自动化毕业生自荐信范文
2014/01/04 职场文书
新学期校长寄语
2014/01/18 职场文书
周年庆典邀请函范文
2014/01/23 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
中国梦演讲稿教师篇
2014/04/23 职场文书
小学生三分钟演讲稿
2014/08/18 职场文书
运动会加油稿100字
2014/09/19 职场文书
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏
教你部署vue项目到docker
2022/04/05 Vue.js