前端框架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 相关文章推荐
Google排名中的10个最著名的 JavaScript库
Apr 27 Javascript
用JS实现一个TreeMenu效果分享
Aug 28 Javascript
Bootstrap carousel轮转图的使用实例详解
May 17 Javascript
javascript显示倒计时控制按钮的简单实现
Jun 07 Javascript
原生js实现键盘控制div移动且解决停顿问题
Dec 05 Javascript
js cookie实现记住密码功能
Jan 17 Javascript
JavaScript获取当前时间向前推三个月的方法示例
Feb 04 Javascript
js判断手机系统是android还是ios
Mar 07 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
Mar 06 Javascript
egg.js的基本使用和调用数据库的方法示例
May 18 Javascript
ES6扩展运算符和rest运算符用法实例分析
May 23 Javascript
jquery插件实现搜索历史
Apr 24 jQuery
前端框架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
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
php实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
2012/08/21 PHP
html中的input标签的checked属性jquery判断代码
2012/09/19 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
javascript函数式编程程序员的工具集
2015/10/11 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
JavaScript关于提高网站性能的几点建议(一)
2016/07/24 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
2017/04/14 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
2018/02/23 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
2020/05/28 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
python3.6.3安装图文教程 TensorFlow安装配置方法
2020/06/24 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
一套C++笔试题面试题
2012/06/06 面试题
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
入团者的自我评价分享
2013/12/02 职场文书
创业计划书如何吸引他人眼球
2014/01/10 职场文书
小松树教学反思
2014/02/11 职场文书
商场营业员岗位职责
2015/04/14 职场文书
贫困证明书范文
2015/06/16 职场文书
省级三好学生主要事迹材料
2015/11/03 职场文书
委托书范本格式
2019/04/18 职场文书
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python
Mysql中@和@@符号的详细使用指南
2022/06/05 MySQL