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 相关文章推荐
JavaScript国旗变换效果代码
Aug 13 Javascript
window.location.hash 使用说明
Nov 08 Javascript
深入理解JavaScript系列(4) 立即调用的函数表达式
Jan 15 Javascript
清除div下面的所有标签的方法
Feb 17 Javascript
javascript实现禁止复制网页内容
Dec 16 Javascript
Angularjs material 实现搜索框功能
Mar 08 Javascript
Bootstrap简单表单显示学习笔记
Nov 15 Javascript
js实现图片轮播效果学习笔记
Jul 26 Javascript
使用vue-router设置每个页面的title方法
Feb 11 Javascript
基于vue实现移动端圆形旋钮插件效果
Nov 28 Javascript
vue登录页面cookie的使用及页面跳转代码
Jul 10 Javascript
实用的 vue tags 创建缓存导航的过程实现
Dec 03 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
PHP 各种排序算法实现代码
2009/08/20 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
js日期时间补零的小例子
2013/03/05 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
URL中“#” “?” &amp;“”号的作用浅析
2017/02/04 Javascript
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
浅谈 Vue 项目优化的方法
2017/12/16 Javascript
理顺8个版本vue的区别(小结)
2018/09/17 Javascript
Vuex的基本概念、项目搭建以及入坑点
2018/11/04 Javascript
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
2020/11/01 Javascript
python处理csv数据动态显示曲线实例代码
2018/01/23 Python
Python实现合并两个列表的方法分析
2018/05/28 Python
Python实现的txt文件去重功能示例
2018/07/07 Python
python路径的写法及目录的获取方式
2019/12/26 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
python 监控服务器是否有人远程登录(详细思路+代码)
2020/12/18 Python
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
使用CSS3编写类似iOS中的复选框及带开关的按钮
2016/04/11 HTML / CSS
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
工厂厂长的职责
2013/12/12 职场文书
文秘专业个人求职信
2013/12/22 职场文书
审计主管岗位职责
2014/01/31 职场文书
英语教师自荐信
2014/05/26 职场文书
销售员岗位职责
2014/06/09 职场文书
2014年党课学习心得体会
2014/07/08 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
医德医风自我评价2015
2015/03/03 职场文书
服装区域经理岗位职责
2015/04/10 职场文书