简单学习vue指令directive


Posted in Javascript onNovember 03, 2016

本文为大家分享了vue指令directive的使用方法,供大家参考,具体内容如下

1.指令的注册

指令跟组件一样需要注册才能使用,同样有两种方式,一种是全局注册:

Vue.directive('dirName',function(){

//定义指令

});

另外一种是局部注册:

new Vue({

directives:{



dirName:{




//定义指令



}


}

});

2.指令的定义

指令定义,官方提供了五个钩子函数来供我们使用,分别代表了一个组件的各个生命周期

bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。

inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。

update: 被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新(详细的钩子函数参数见下)。

componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。

unbind: 只调用一次, 指令与元素解绑时调用。

在这里其他几个都好理解,关于模板更新(update)这里,本人的理解是:该指令所在的模板有变化而需要重新渲染的时候,比如当一个输入框的model发生了变化就会触发指令。当然此处说的比较模糊,具体的还有待研究。

这段代码可以实现关于update的使用

<div id="app">
<input type="text" v-focus="name" v-model="name" :data-name="name">

<button type="button" @click="name='zw'">click</button>


<!--当点击按钮的时候name改变,继而触发update中的方法-->
</div>
<script>


Vue.directive('focus',{


bind: function(el, binding){


console.log('bind:',binding.value);

},

inserted: function(el, binding){


console.log('insert:',binding.value);

},

update: function(el, binding, vnode, oldVnode){


el.focus();


console.log(el.dataset.name);//这里的数据是可以动态绑定的


console.table({



name:binding.name,



value:binding.value,



oldValue:binding.oldValue,



expression:binding.expression,



arg:binding.arg,



modifiers:binding.modifiers,



vnode:vnode,



oldVnode:oldVnode


});

},

componentUpdated: function(el, binding){


console.log('componentUpdated:',binding.name);

}
});
new Vue({

el:'#app',

data:{


name:'zwzhai'

}
});
</script>

3.钩子函数的定义

以下是官方提供的几个参数:

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 编译生成的虚拟节点,查阅 VNode API 了解更多详情。
oldVnode: 上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。

这几个参数,大家看文档也能理解,就不多说了,关于bingding的几个属性说一下自己的看法,value这个属性,可以传字面量,也可以传单条语句(如上),还可以以变量的形式如<input type="text" v-focus="name" v-model="name">;arg这里可以传一个字符串,因为在value去访问绑定值得时候拿到的不是直接写的那个,也就是说v-focus="name",这个name永远都是一个变量,需要定义赋值,而arg可以直接访问该值,如v-focus:foo,那么在钩子函数中拿到的就是foo这个字符串。

在vue的指令中是不可以双向数据绑定的,如官方所说:除了 el 之外,其它参数都应该是只读的,尽量不要修改他们。如果需要在钩子之间共享数据,建议通过元素的 dataset 来进行。这里补充下关于dataset的知识:

data-  是html5的一个新属性,查了下浏览器支持程度,目前的主流浏览器都是支持的,IE的话要到10以上。具体的使用:在HTML中以属性的方式去写,data-yourname="value",在js中取这个属性就不用使用getAttribute这个方法,而是直接访问,ele.dataset.yourname,在js中你也可以添加和删除,添加:ele.dataset.dessert="yourname",删除:dette ele.dataset.name。此外,这个属性可以用作css选择器:.class[data-name]:{}。

最后附上自己写的一个vue小程序,简单的页面切换,使用vue-cli构建,sample的简单版,还使用的mint-ui组件库,git地址:https://github.com/Stevenzwzhai/news-vue

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

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

Javascript 相关文章推荐
js 页面元素的几个用法总结
Nov 18 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
Feb 25 Javascript
js实现内容显示并使用json传输数据
Mar 16 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
Jun 22 Javascript
Bootstrap框架安装使用详解
Jan 21 Javascript
JavaScript、C# URL编码、解码总结
Jan 21 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
Aug 04 jQuery
EL表达式截取字符串的函数说明
Sep 22 Javascript
jQuery中ajax获取数据赋值给页面的实例
Dec 31 jQuery
vue-cli2 构建速度优化的实现方法
Jan 08 Javascript
uni-app 组件里面获取元素宽高的实现
Dec 27 Javascript
Vue提供的三种调试方式你知道吗
Jan 18 Vue.js
Vue.js常用指令汇总(v-if、v-for等)
Nov 03 #Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
Nov 03 #Javascript
原生javascript实现的ajax异步封装功能示例
Nov 03 #Javascript
探索Vue.js component内容实现
Nov 03 #Javascript
javascript跨域请求包装函数与用法示例
Nov 03 #Javascript
预防网页挂马的方法总结
Nov 03 #Javascript
网页挂马方式整理及详细介绍
Nov 03 #Javascript
You might like
PHP+MySQL 手工注入语句大全 推荐
2009/10/30 PHP
php 目录与文件处理-郑阿奇(续)
2011/07/04 PHP
php-fpm配置详解
2014/02/12 PHP
php中socket通信机制实例详解
2015/01/03 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
2019/09/03 PHP
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
用javascript删除当前行,添加行(示例代码)
2013/11/25 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
浅谈javascript中字符串String与数组Array
2014/12/31 Javascript
jquery获取及设置outerhtml的方法
2015/03/09 Javascript
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
详解javascript函数的参数
2015/11/10 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
2016/07/19 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
bootstrap table服务端实现分页效果
2017/08/10 Javascript
vue中组件的过渡动画及实现代码
2018/11/21 Javascript
extjs4图表绘制之折线图实现方法分析
2020/03/06 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
Vue3配置axios跨域实现过程解析
2020/11/25 Vue.js
jquery实现广告上下滚动效果
2021/03/04 jQuery
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
在Python的Django框架中创建语言文件
2015/07/27 Python
python+pyqt5编写md5生成器
2019/03/18 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
ipython jupyter notebook中显示图像和数学公式实例
2020/04/15 Python
Expedia挪威官网:酒店、机票和租车
2018/03/03 全球购物
十佳文明家庭事迹
2014/05/25 职场文书
电子商务系毕业生自荐信
2014/05/29 职场文书
离婚协议书范本(通用篇)
2014/11/30 职场文书
JS数组的常用方法整理
2021/03/31 Javascript
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python