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 可以拖动的DIV(二)
Jun 26 Javascript
Prototype Hash对象 学习
Jul 19 Javascript
基于jQuery的为attr添加id title等效果的实现代码
Apr 20 Javascript
js 页面关闭前的出现提示的实现代码
May 25 Javascript
js创建数据共享接口——简化框架之间相互传值
Oct 23 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
Jan 12 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
Jul 22 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
Sep 14 Javascript
javascript 作用于作用域链的详解
Sep 27 Javascript
JavaScript模块详解
Dec 18 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
May 05 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
Dec 29 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 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
深入聊聊Array的sort方法的使用技巧.详细点评protype.js中的sortBy方法
2007/04/12 Javascript
JS 对象介绍
2010/01/20 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
JS长整型精度问题实例分析
2015/01/13 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
2016/01/25 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
Angular Excel 导入与导出的实现代码
2019/04/17 Javascript
ionic+html5+API实现双击返回键退出应用
2019/09/17 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
原生JavaScript实现购物车
2021/01/10 Javascript
利用python模拟sql语句对员工表格进行增删改查
2017/07/05 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
2018/10/21 Python
Python中的取模运算方法
2018/11/10 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
Python实现爬取并分析电商评论
2020/06/19 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
Goodee官方商店:迷你投影仪
2021/03/15 全球购物
大学自主招生自荐信范文
2014/02/26 职场文书
《难忘的泼水节》教学反思
2014/02/27 职场文书
旅游市场营销方案
2014/03/09 职场文书
工作说明书格式
2014/07/29 职场文书
英语课前三分钟演讲稿(6篇)
2014/09/13 职场文书
民事代理词范文
2015/05/25 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP
详解Go与PHP的语法对比
2021/05/29 PHP
Oracle删除归档日志及添加定时任务
2022/06/28 Oracle