简单学习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 相关文章推荐
c#和Javascript操作同一json对象的实现代码
Jan 17 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
Jan 27 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
Mar 01 Javascript
js实现tab切换效果实例
Sep 16 Javascript
详解AngularJS中的filter过滤器用法
Jan 04 Javascript
webpack打包单页面如何引用的js
Jun 07 Javascript
Angular2关于@angular/cli默认端口号配置的问题
Jul 15 Javascript
JS+CSS实现滚动数字时钟效果
Dec 25 Javascript
微信小程序日期选择器实例代码
Jul 18 Javascript
跨域请求两种方法 jsonp和cors的实现
Nov 11 Javascript
vue-router为激活的路由设置样式操作
Jul 18 Javascript
vue中activated的用法
Jan 03 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验证码代码
2012/02/27 PHP
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
javascript 自动转到命名锚记
2009/01/10 Javascript
S2SH整合JQuery+Ajax实现登录验证功能实现代码
2013/01/30 Javascript
JS远程获取网页源代码实例
2013/09/05 Javascript
javascript编写实用的省市选择器
2015/02/12 Javascript
浅谈EasyUI中Treegrid节点的删除
2015/03/01 Javascript
JavaScript构造函数详解
2015/12/27 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
angular bootstrap timepicker TypeError提示怎么办
2017/06/13 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
2020/03/26 Javascript
vue treeselect获取当前选中项的label实例
2020/08/31 Javascript
[51:28]EG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/16 DOTA
Python程序语言快速上手教程
2012/07/18 Python
python使用matplotlib绘制柱状图教程
2017/02/08 Python
Python中格式化format()方法详解
2017/04/01 Python
python基础教程项目三之万能的XML
2018/04/02 Python
Python类的动态绑定实现原理
2020/03/21 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
Boutique 1美国:阿联酋奢侈时尚零售商
2017/10/16 全球购物
Skyscanner加拿大:全球旅行搜索平台
2018/11/19 全球购物
英国第一摩托车和摩托车越野配件商店:GhostBikes
2019/03/10 全球购物
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
一套Java笔试题
2016/08/20 面试题
Jdbc数据访问技术面试题
2012/03/30 面试题
内容编辑个人求职信
2013/12/10 职场文书
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
2014党员四风对照检查材料思想汇报
2014/09/17 职场文书
违纪检讨书
2015/01/27 职场文书
处罚决定书范文
2015/06/24 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle
Pycharm连接远程服务器并远程调试的全过程
2021/06/24 Python
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
2021/07/01 Java/Android