前端框架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 相关文章推荐
不错的asp中显示新闻的功能
Oct 13 Javascript
JavaScript 学习笔记一些小技巧
Mar 28 Javascript
javascript语言结构小记(一)
Sep 10 Javascript
JQuery循环滚动图片代码
Dec 08 Javascript
图片动画横条广告带上下滚动的JS代码
Oct 25 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
Mar 19 Javascript
js模仿java的Map集合详解
Jan 06 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
Feb 16 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
May 11 Javascript
JS使用tofixed与round处理数据四舍五入的区别
Oct 25 Javascript
Vue项目分环境打包的实现步骤
Apr 02 Javascript
Vue2.0搭建脚手架
Mar 13 Vue.js
前端框架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/04/28 PHP
php的curl实现get和post的代码
2008/08/23 PHP
解析PHP工厂模式的好处
2013/06/18 PHP
PHP中危险的file_put_contents函数详解
2017/11/04 PHP
JCalendar 日历控件 v1.0 beta[兼容IE&amp;Firefox] 有文档和例子
2007/05/30 Javascript
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
2010/08/13 Javascript
escape编码与unescape解码汉字出现乱码的解决方法
2014/07/02 Javascript
jquery编写Tab选项卡滚动导航切换特效
2020/07/17 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
js 定义对象数组(结合)多维数组方法
2016/07/27 Javascript
jQuery 如何实现一个滑动按钮开关
2016/12/01 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
Vue Router history模式的配置方法及其原理
2019/05/30 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
对vuex中store和$store的区别说明
2020/07/24 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
2020/08/03 Javascript
[03:22]DOTA2超级联赛专访单车:找到属于自己的英雄
2013/06/08 DOTA
Python实现简单的文件传输与MySQL备份的脚本分享
2016/01/03 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
Python3实现二叉树的最大深度
2019/09/30 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
基于python实现复制文件并重命名
2020/09/16 Python
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
2019年c语言经典面试题目
2016/08/17 面试题
Windows和Linux动态库应用异同
2016/07/28 面试题
怀念母亲教学反思
2014/04/28 职场文书
贷款担保书
2015/01/20 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书
Oracle创建只读账号的详细步骤
2021/06/07 Oracle
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL
Python3.8官网文档之类的基础语法阅读
2021/09/04 Python