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 this关键字的问题
Jan 09 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
Jun 09 Javascript
jquery实现textarea 高度自适应
Mar 11 Javascript
通过伪协议解决父页面与iframe页面通信的问题
Apr 05 Javascript
EasyUi combotree 实现动态加载树节点
Apr 01 Javascript
使用jQuery给input标签设置默认值
Jun 20 Javascript
js插件dropload上拉下滑加载数据实例解析
Jul 27 Javascript
详解jQuery中基本的动画方法
Dec 14 Javascript
浅谈JavaScript的计时器对象
Dec 26 Javascript
video.js使用改变ui过程
Mar 05 Javascript
vue slots 组件的组合/分发实例
Sep 06 Javascript
ES6 Object方法扩展的应用实例分析
Jun 25 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
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
PHP获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
CI框架中zip类应用示例
2014/06/17 PHP
PHP实现微信对账单处理
2018/10/01 PHP
判断JavaScript对象是否可用的最正确方法分析
2008/10/03 Javascript
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
JQuery获取浏览器窗口内容部分高度的代码
2012/02/24 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
2014/03/22 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
JavaScript+CSS无限极分类效果完整实现方法
2015/12/22 Javascript
jQuery插件ContextMenu自定义图标
2017/03/15 Javascript
详解vue事件对象、冒泡、阻止默认行为
2017/03/20 Javascript
Vuex简单入门
2017/04/19 Javascript
JavaScript禁用右键单击优缺点分析
2019/01/20 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
2020/08/10 Javascript
[04:26]2014DOTA2西雅图国际邀请赛 总决赛TOPPLAY
2014/07/22 DOTA
pycharm 使用心得(四)显示行号
2014/06/05 Python
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
python统计cpu利用率的方法
2015/06/02 Python
Python数据类型之列表和元组的方法实例详解
2019/07/08 Python
简单了解python反射机制的一些知识
2019/07/13 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
python多线程使用方法实例详解
2019/12/30 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
2020/02/17 Python
django项目中新增app的2种实现方法
2020/04/01 Python
Vans奥地利官方网站:美国原创极限运动潮牌
2018/09/30 全球购物
服务行业个人求职的自我评价
2013/12/12 职场文书
交通事故协议书
2014/04/15 职场文书
教师旷工检讨书
2015/08/15 职场文书
原生JS封装vue Tab切换效果
2021/04/28 Vue.js