简单学习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 相关文章推荐
jQuery EasyUI API 中文文档 - DataGrid数据表格
Nov 17 Javascript
JavaScript基本编码模式小结
May 23 Javascript
javascript变量作用域使用中常见错误总结
Mar 26 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
Apr 08 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
Mar 05 Javascript
浅析JavaScript 调试方法和技巧
Oct 22 Javascript
实例详解JavaScript获取链接参数的方法
Jan 01 Javascript
JS实现旋转木马式图片轮播效果
Jan 18 Javascript
JS自定义滚动条效果简单实现代码
Oct 27 Javascript
vue以组件或者插件的形式实现throttle或者debounce
May 22 Javascript
Element-ui el-tree新增和删除节点后如何刷新tree的实例
Aug 31 Javascript
vue循环中点击选中再点击取消(单选)的实现
Sep 10 Javascript
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
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
PHP删除数组中特定元素的两种方法
2013/07/02 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
Symfony2 session用法实例分析
2016/02/04 PHP
通过javascript的匿名函数来分析几段简单有趣的代码
2010/06/29 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
浅谈Sublime Text 3运行JavaScript控制台
2016/06/06 Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
2016/08/19 Javascript
JS中用三种方式实现导航菜单中的二级下拉菜单
2016/10/31 Javascript
微信小程序 详解下拉加载与上拉刷新实现方法
2017/01/13 Javascript
浅谈js中的this问题
2017/08/31 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
javascript关于“时间”的一次探索
2019/07/24 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
2020/11/02 Javascript
在Django中使用Sitemap的方法讲解
2015/07/22 Python
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
可能是最全面的 Python 字符串拼接总结【收藏】
2018/07/09 Python
Python Cookie 读取和保存方法
2018/12/28 Python
python实现词法分析器
2019/01/31 Python
Python之lambda匿名函数及map和filter的用法
2019/03/05 Python
python cumsum函数的具体使用
2019/07/29 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
意大利香水和化妆品购物网站:Parfimo.it
2019/10/06 全球购物
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
Java里面有没有全局变量?为什么?
2015/02/06 面试题
护士自我评价范文
2014/01/25 职场文书
向领导表决心的话
2014/03/11 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
2014年体育部工作总结
2014/11/13 职场文书
红与黑读书笔记
2015/06/29 职场文书
志愿服务心得体会
2016/01/15 职场文书
感谢信
2019/04/11 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书