Vue自定义指令使用方法详解


Posted in Javascript onAugust 21, 2017

Vue自定义指令的使用,具体内容如下

1.自定义指令的语法

Vue自定义指令语法如下:

Vue.directive(id, definition)

传入的两个参数,id是指指令ID,definition是指定义对象。其中,定义对象可以提供一些钩子函数

2.钩子函数

定义对象的钩子函数如下:

Vue自定义指令使用方法详解

钩子函数的参数

el: 指令所绑定的元素,可以用来直接操作 DOM 。

binding: 一个对象,包含以下属性:
*name: 指令名,不包括 v- 前缀。
*value: 指令的绑定值, 例如: 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 钩子中可用。

3.例子

Vue自定义指令常见使用例子如下:

Vue.directive('my-directive', {
 bind: function(){
 //做绑定的准备工作
 //比如添加事件监听器,或是其他只需要执行一次的复杂操作
 },
 inserted: function(){
 //...
 },
 update: function(){
 //根据获得的新值执行对应的更新
 //对于初始值也会调用一次
 },
 componentUpdated: function(){
 //...
 },
 unbind: function(){
 //做清理操作
 //比如移除bind时绑定的事件监听器
 }

当指令的定义对象中只使用update时,只需直接传入函数即可,如下:

Vue.directive('my-directive', function(){
 //...
})

4.应用

我们往往自定义指令都是定义到全局,方式如下:

第一步:建立一个全局的命令文件例如:directive/directives.js.

第二步:利用Vue.directive()建立一个全局命令,并将它暴露出来,例如一个focus 让表单自动聚焦.

directives.js

import Vue from 'vue';
Vue.directive('focus',{
 //当绑定元素插入到DOM中
 inserted: function(el){
  el.focus(); //元素聚焦
  el.setAttribute('placeholder','自定义内容');
 }
})
Vue.directive('***',{
 inserted: function(el){
  //....
 }
})

export {Vue}

第三步:在main.js(入口JS文件)中将它引入,可以省略文件后缀.

main.js

import directive from './components/global/directives';

这样任何一个Vue文件只要这样v-focus(命令名),就可以很方便的用到了

<el-input v-model="input" placeholder="" v-focus></el-input>

如果指令需要传值或者多个值

<body id="example">
 <div id="demo" v-demo="{color : 'white',text : 'hello!'}"></div>
</body>
<script>
 Vue.directive('demo',function(value){
  console.info(value.color); //white
  console.info(value.text) // hello!
 })
 var demo = new Vue({
  el : '#demo'
 })
</script>
----------

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JScript中使用ADODB.Stream判断文件编码的代码
Jun 09 Javascript
Javascript倒计时页面跳转实例小结
Sep 11 Javascript
node.js使用require()函数加载模块
Nov 26 Javascript
javascript常用的方法分享
Jul 01 Javascript
关于js函数解释(包括内嵌,对象等)
Nov 20 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
Jul 16 Javascript
Vue 2.0入门基础知识之内部指令详解
Oct 15 Javascript
详解Js中的模块化是如何实现的
Oct 18 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
May 28 jQuery
jquery+css实现Tab栏切换的代码实例
May 14 jQuery
vue登录页面cookie的使用及页面跳转代码
Jul 10 Javascript
vue使用video插件vue-video-player详解
Oct 23 Javascript
javascript实现Java中的Map对象功能的实例详解
Aug 21 #Javascript
Vue ElementUI之Form表单验证遇到的问题
Aug 21 #Javascript
JavaScript中各数制转换全面总结
Aug 21 #Javascript
JQuery判断正整数整理小结
Aug 21 #jQuery
温故知新——JavaScript中的字符串连接问题最全总结(推荐)
Aug 21 #Javascript
Vue.js实现按钮的动态绑定效果及实现代码
Aug 21 #Javascript
Node.js简单入门前传
Aug 21 #Javascript
You might like
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
浅析Yii2 gridview实现批量删除教程
2016/04/22 PHP
php源码的安装方法和实例
2019/09/26 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
javascript encodeURI和encodeURIComponent的比较
2010/04/03 Javascript
json原理分析及实例介绍
2012/11/29 Javascript
jquery.ui.draggable中文文档(原文翻译)
2013/11/15 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
JS操作iframe里的dom(实例讲解)
2014/01/29 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
JS实现的自动打字效果示例
2017/03/10 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
2017/03/23 jQuery
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
原生JS与jQuery编写简单选项卡
2017/10/30 jQuery
vue-cli2.9.3 详细教程
2018/04/23 Javascript
在Create React App中启用Sass和Less的方法示例
2019/01/16 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
[57:16]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第二场
2014/05/26 DOTA
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
python文件操作相关知识点总结整理
2016/02/22 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
详解Pycharm出现out of memory的终极解决方法
2020/03/03 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
矫正人员思想汇报
2014/01/08 职场文书
交通事故委托书范本精选
2014/10/04 职场文书
2015年行政人事部工作总结
2015/05/13 职场文书
对公司的意见和建议
2015/06/04 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
蓝天保卫战收官在即 :15行业将开展环保分级评价
2019/07/19 职场文书