前端框架Vue.js中Directive知识详解


Posted in Javascript onSeptember 12, 2016

Directive

看上去虽然和Angular中的定义类似,Directive 都是对DOM功能的一种拓展,但是 Vue 的 Directive 要弱的多。因为 Vue Component 其实本来就会包含对DOM的操作,所以大多数时候我们写一个通用组件都是一个Component 而不是一个 Directive,而 在 Angular 我们写一个通用的组件一般都是一个 Directive 。
所以我说 Vue 的 Directive 相比于 Angular 要弱的多,也可以说纯粹的多,他就是对 DOM 功能的一个拓展,而不是为了封装和DOM相关的逻辑。有兴趣可以通过对比这两个UI库就能明白:
 •Vux https://github.com/airyland/vux
 •Angular Bootstrap https://github.com/angular-ui/bootstrap 

对比就会发现,其实在 Vue 中我们封装一个通用的组件(其实不管是不是通用)都是一个 Component,但是在 Angular 中却是一个 Directive,因为 Angular 中的 Controller 其实只能创建一个 $scope 作用域。可以简单的认为在 Vue Directive = Angular Directive + Controller。前面讲到过 Vue 很多设计都和Angular2类似,Vue 中的 Directive 基本可以等价于 Angular2 的 Directive,但是千万不要和 Angular 中的 Directive 搞混了。

为了避免误导,所以后面不再拿 Angular Directive 作对比了。

生命周期

生命周期分为三步:
 •bind 第一次绑定到DOM元素上的时候触发
 •update bind完成之后立刻触发,以后每当参数更新的时候都会触发
 •unbind 解除和DOM元素的绑定时触发 

API 简洁到哭。。。
其中 update 是最重要的,也就是当 Directive 接收到一个值的更新的时候就会执行对应的代码。update函数接收的参数就是用户通过 Attr 传入的值。

我们下面实现一个简单的 Directive,它的作用是对 Todo List 输入的内容进行校验(表单校验)。Directive 基本结构如下:

Vue.directive("minlength", {
 bind: function() {
 },
 update: function(value) {
 },
 unbind: function() {
 }
});

 然后,我们需要在用户输入的时候进行校验,这里实现一个简单的 minlength 校验,代码如下:

Vue.directive("minlength", {
 bind: function() {
 var self = this;
 var el = this.el;
 el.addEventListener("keydown", function(e) {
  if(e.keyCode === 13) {
  if(el.value.length < self.minlength) {
   e.preventDefault();
  }
  }
 });
 var submit = el.parentNode.querySelector("button, [type='submit']");
 submit.disabled = true;
 el.addEventListener("keyup", function(e) {
  submit.disabled = (el.value.length < self.minlength);
 });

 },
 update: function(value) {
 this.minlength = parseInt(value);
 },
 unbind: function() {
 }
});

基本逻辑就在在 bind 阶段的时候就绑定事件,然后根据 update 时候传入的 minlength 值来进行判断。

目前看,Directive 应该就是为了实现类似的功能存在的,当然还有很多细枝末节的用法就不再细讲了。Directive 在 Vue 中并不是很重要的一块,大家平时写代码的时候更多还是写 Component。

Filter 和 Mixins 看起来比较简单,略过。

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

Javascript 相关文章推荐
Expandable &quot;Detail&quot; Table Rows
Aug 29 Javascript
JavaScript函数、方法、对象代码
Oct 29 Javascript
JQUERY 对象与DOM对象之两者相互间的转换
Apr 27 Javascript
jQuery 过滤not()与filter()实例代码
May 10 Javascript
jquery选择checked在ie8普通模式下的问题
Feb 12 Javascript
js获取元素外链样式的方法
Jan 27 Javascript
JQuery勾选指定name的复选框集合并显示的方法
May 18 Javascript
使用Angular.js开发的注意事项
Oct 19 Javascript
Javascript 判断两个IP是否在同一网段实例代码
Nov 28 Javascript
jQuery实现弹幕效果
Feb 17 Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
Sep 12 Javascript
vue解决使用$http获取数据时报错的问题
Oct 30 Javascript
前端框架Vue.js构建大型应用浅析
Sep 12 #Javascript
jQuery过滤选择器用法示例
Sep 12 #Javascript
强大Vue.js组件浅析
Sep 12 #Javascript
超详细的JS弹出窗口代码大全
Apr 18 #Javascript
使用JS实现图片展示瀑布流效果的实例代码
Sep 12 #Javascript
关于javascript的一些知识以及循环详解
Sep 12 #Javascript
基于AngularJS实现iOS8自带的计算器
Sep 12 #Javascript
You might like
php mysql数据库操作分页类
2008/06/04 PHP
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
PHP四种基本排序算法示例
2015/04/09 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
javascript之学会吝啬 精简代码
2010/04/25 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
使用js实现雪花飘落效果
2013/08/26 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
2016/02/02 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
Jquery树插件zTree实现菜单树
2017/01/24 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
2019/11/05 Javascript
在vue中使用vuex,修改state的值示例
2019/11/08 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
在Django的视图(View)外使用Session的方法
2015/07/23 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
Python书单 不将就
2017/07/11 Python
python中hashlib模块用法示例
2017/10/30 Python
python字符串的方法与操作大全
2018/01/30 Python
基于Django统计博客文章阅读量
2019/10/29 Python
Pytorch实现的手写数字mnist识别功能完整示例
2019/12/13 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
python 写一个文件分发小程序
2020/12/05 Python
HTML5 canvas实现的静态循环滚动播放弹幕
2021/01/05 HTML / CSS
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
Douglas意大利官网:购买香水和化妆品
2020/05/27 全球购物
工程质量承诺书
2014/03/27 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书
党员志愿者活动方案
2014/08/28 职场文书
党性心得体会
2014/09/03 职场文书
我与祖国共奋进演讲稿
2014/09/13 职场文书
小学六一儿童节活动总结
2015/05/05 职场文书