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

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 看起来比较简单,略过。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持北冥有鱼编程技术建站教程。

您可能感兴趣的文章:

  • 前端框架Vue.js构建大型应用浅析
  • vue,angular,avalon这三种MVVM框架优缺点
  • Vue框架中正确引入JS库的方法介绍
  • vue.js中mint-ui框架的使用方法
  • 使用vue框架 Ajax获取数据列表并用BootStrap显示出来
  • Vue2.0 UI框架ElementUI使用方法详解
  • 前端框架学习总结之Angular、React与Vue的比较详解
  • 利用VUE框架,实现列表分页功能示例代码
  • 基于Vuejs框架实现翻页组件
  • 小白教程|一小时上手最流行的前端框架vue(推荐)

相关推荐:

Vue.js实现大屏数字滚动翻转效果

大屏数字滚动翻转效果来源于最近工作中element后台管理页面一张大屏的UI图,该UI图上有一个模块需要有数字往上翻动的效果,以下是最终实现的效果: 整体思路: 在实现此效果之前,我们先来捋一下思路,用思维导图来设计一下我们的实现步骤,如下: 你可以审查元素,下载数字背景图片,复制图片地址,或者使用...

vue.js中如何获取某个dom元素的值

这篇文章主要介绍了vue.js中如何获取某个dom元素的值,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。vue.js获取某个dom元素值的方法:1、在【vue.js1.0】版本可以通过【v-el】来取得dom元素;2、在【Vue.js2....

vue.js中怎么获取url的值

小编给大家分享一下vue.js中怎么获取url的值,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!vue.js中获取url值的方法:1、在【main.js】中写入【path:'/goodsinfo/:goodsId...

vue.js或js如何实现中文A-Z排序

这篇文章主要介绍了vue.js或js如何实现中文A-Z排序,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。js的作用是什么1、能够嵌入动态文本于HTML页面。2、对浏览器事件做出响应。3、读写HTML元素。4、在数据被提交到服务器之前验...

Vue.js怎么实现表格动态增加删除

这篇文章给大家分享的是有关Vue.js怎么实现表格动态增加删除的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Vue的优点Vue具体轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的分离、虚拟DOM、运行速度快等优势,Vue中页面使用的是局部刷新,不用每次跳转页面都要...

vue.js如何获取input里面的值

这篇文章主要介绍vue.js如何获取input里面的值,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!vue.js获取input里面值的方法:1、使用【$.ref】来标识元素,点击submit方法,【this.$ref.】获取内容;2、使用【v-model】双向绑定,点击sub...

vue.js在标签属性中插入变量参数的方法

html的标签的属性,比如id、class、href需要动态传递参数,拼接字符串,查了一些资料,并没有找到合适的解决方法,琢磨了一上午,终于试出了方法: v-bind:属性=“‘字符串'+自定义变量名”,自己试了没问题,有需要的朋友可以借鉴下! 最后需要注意一下属性一定是":属性="这种形式才会起作...