前端框架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 相关文章推荐
JS重要知识点小结
Nov 06 Javascript
JS验证身份证有效性示例
Oct 11 Javascript
JS获取select-option-text_value的方法
Dec 26 Javascript
js事件监听机制(事件捕获)总结
Aug 08 Javascript
jQuery简单获取键盘事件的方法
Jan 22 Javascript
javascript实现延时显示提示框特效代码
Apr 27 Javascript
JS for...in 遍历语句用法实例分析
Aug 24 Javascript
使用Curl命令查看请求响应时间方法
Nov 04 Javascript
关于微信jssdk实现多图片上传的一点心得分享
Dec 13 Javascript
javascript触发模拟鼠标点击事件
Jun 26 Javascript
微信小程序实现蒙版弹出窗功能
Sep 17 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
Sep 10 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 magic_quotes_gpc的一点认识与分析
2008/08/18 PHP
在PHP中设置、使用、删除Cookie的解决方法
2013/05/06 PHP
php实现的替换敏感字符串类实例
2014/09/22 PHP
详细解读PHP中接口的应用
2015/08/12 PHP
不错的JS中变量相关的细节分析
2007/08/13 Javascript
jquery下实现overlay遮罩层代码
2010/08/25 Javascript
js判断输入是否为正整数、浮点数等数字的函数代码
2010/11/17 Javascript
Javascript 遮罩层和加载效果代码
2013/08/01 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
js 触发select onchange事件代码
2014/03/20 Javascript
JavaScript中实现依赖注入的思路分享
2015/01/15 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
vue修改Element的el-table样式的4种方法
2020/09/17 Javascript
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
Python闭包装饰器使用方法汇总
2020/06/29 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
2020/07/06 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
JPA面试常见问题
2016/11/14 面试题
java程序员面试交流
2012/11/29 面试题
会计专业毕业生自我鉴定
2013/10/29 职场文书
大学生个人自荐信样本
2014/03/02 职场文书
安全演讲稿大全
2014/05/09 职场文书
语文教育专业求职信
2014/06/28 职场文书
入党积极分子学习优秀共产党员先进事迹思想汇报
2014/09/13 职场文书
市级三好学生评语
2014/12/29 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
初二物理教学反思
2016/02/19 职场文书
HTML5基础学习之文本标签控制
2022/03/25 HTML / CSS