前端框架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 相关文章推荐
select 控制网页内容隐藏于显示的实现代码
May 25 Javascript
iframe 父窗口和子窗口相互的调用方法集锦
Dec 15 Javascript
JS实现的5级联动Select下拉选择框实例
Aug 17 Javascript
浅析JavaScript声明变量
Dec 21 Javascript
AngularJs 指令详解及示例代码
Sep 01 Javascript
完美实现js选项卡切换效果(一)
Mar 08 Javascript
Node.js dgram模块实现UDP通信示例代码
Sep 26 Javascript
JS代码实现电脑配置检测功能
Mar 21 Javascript
vue中导出Excel表格的实现代码
Oct 18 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
Feb 12 Javascript
详解使用uni-app开发微信小程序之登录模块
May 09 Javascript
Vue 解决通过this.$refs来获取DOM或者组件报错问题
Jul 28 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多用户计数器代码
2007/03/11 PHP
php中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
yii实现CheckBox复选框在同一行显示的方法
2014/12/03 PHP
php中instanceof 与 is_a()区别分析
2015/03/03 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
php-msf源码详解
2017/12/25 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
2018/05/24 PHP
使用PHP反射机制来构造&quot;CREATE TABLE&quot;的sql语句
2019/03/21 PHP
JavaScript prototype属性深入介绍
2012/11/27 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
JS Array创建及concat()split()slice()的使用方法
2016/06/03 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
2019/06/03 Javascript
深入解析koa之中间件流程控制
2019/06/17 Javascript
JavaScript实现简易聊天对话框(加滚动条)
2020/02/10 Javascript
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
Python 爬虫多线程详解及实例代码
2016/10/08 Python
python进程管理工具supervisor的安装与使用教程
2017/09/05 Python
Python矩阵常见运算操作实例总结
2017/09/29 Python
python Flask实现restful api service
2017/12/04 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
Python 监测文件是否更新的方法
2019/06/10 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
2020/06/23 Python
Python Celery异步任务队列使用方法解析
2020/08/10 Python
Python try except else使用详解
2021/01/12 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
教师找工作推荐信
2013/11/23 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
社区班子对照检查材料
2014/08/27 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书