vue之指令篇 ps简单的对比angular
这两天在开始vue的大型项目,发现和ng还是有许多不同,这里对比下两者的指令系统
难度系数:ng的指令难度大于vue;至少vue上暂时没发现@&=;require,compile,precompile,postcompile之类的小型地雷。。。
这篇文章只看表象;何为指令?这里借助ng的解释来解释vue,就是当你的项目中,需要一些dom操作,并且自带的事件指令感觉麻烦的时候,可以把一些dom操作封装到一个公共方法,这就是指令,大概用在vue上也可以说个70%;
写法,vue:
Vue.directive('my-directive', {
bind: function () {
// 准备工作
// 这里可以写一些公共方法,比如点击一个块那些东西hide,show
其中this.el就是那个挂载指令的dom点,
},
update: function (newValue, oldValue) {
// 值更新时的工作
// 也会以初始值为参数调用一次
},
unbind: function () {
// 清理工作
// 例如,删除 bind() 添加的事件监听器
}
})
指令内部可以定义多个属性,可以理解为一个指令具备一个作用域scope,但是这个作用域能否为false;和外部公用一个作用域,不清楚,不过个人理解应该不可以的,因为
vue把ng指令里的tenplate项拆开了变成组件component,当然,这个好坏个人感官不同,不过component貌似也不可以设置scope为false,需要prop进行传参,类似
ng的&@=绑定,当然比之要简单许多;
对于ng这里不多讲,想要了解,自行参看本人github上一个独立完成的未上线的成品ng项目(angular1+ui-router):当时那个坑,一个人独自摸索,头都大了。。。
https://github.com/lyz1991/the-project-of-angular (ps:广告,希望进入了得最好关注下,虽然只是个游荡各个场所的菜鸟)
重点讲vue的指令(纯属个人一天的实验理解)
首先三大方法(其实应该是n个,三个是主流),bind,update,unbind;
字面意思:bind:主要是我为我当前添加指令的那个dom点需要添加哪些事件可以写在这里,比如为一个dom添加一个click事件,为指令第一个执行的方法
update:为值放生变化时候执行的方法,其实应该是指令继bind后第二个执行的方法;unbind:指令离开时候触发的方法(这个暂时具体有什么意义还不清楚);
可能文字不太清楚,两个demo来解释下
第一个,一个简单的长按指令
Vue.directive('longTap', {
params: ['idx'],//这个和下面的timer可以简单理解为jq插件的defaults,区别就是上面的是动态的,放在html上,值是根据data进行赋值的;
timer: null,
bind: function () {
var self = this
var arge = this.expression
this.change = function (x) {
self.vm.$data[arge] = x
}
this.el.addEventListener('touchstart', function () {
self.timer = setTimeout(function () {
self.change(self.params.idx)
}, 1000) }
)
this.el.addEventListener('touchmove', function () {
clearTimeout(self.timer)
})
this.el.addEventListener('touchend', function () {
clearTimeout(self.timer)
})
}
})
第二个就是vue官网的demo;
Vue.directive('demo', {
bind: function () {
console.log('demo bound!')
},
update: function (value) {
this.el.innerHTML =
'name - ' + this.name + '<br>' +
'expression - ' + this.expression + '<br>' +
'argument - ' + this.arg + '<br>' +
'modifiers - ' + JSON.stringify(this.modifiers) + '<br>' +
'value - ' + value//注意这里的value是你属性上的的表达式解析后的值
}
})
var demo = new Vue({
el: '#demo',
data: {
msg: 'hello!'
}
})
params和arg
首先arg是紧跟着指令后面,而params是和指令之间有个空格;
用处区别。我给的是个动态参数需要data解析的用前者,非动态用后者;其中后者的值可以通过update里的value获取得到,update有两个参数
注意如果是字符串,必须要要写修饰符literal,如果是对象可以不写;params的用处可以动态传参,那么arg的用处何在呢?其实我想了半天也没想到什么好的用处,也就是点击时候对应模块show,hide传参数显示;注意这里如果在update里面直接获取value的节点是获取不到报错;这个value当作为指令本身的值,也就是不存在arg的时候。可以认为具备了动态的作用;对应的引入一个属性:acceptStatement:他的意思是解析一个表达式;
常用的应该是这几个吧,剩下的三个改天再说;
vue之指令篇 ps简单的对比angular的更多相关文章
- Vue 之指令篇
文件指令 <body> <div id="app"> <!-- 1) 插值表达式 --> <p>{ ...
- Vue.js 源码分析(十六) 指令篇 v-on指令详解
可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码,例如: <!DOCTYPE html> <html lang="en"& ...
- vue学习指南:第二篇(详细Vue基础) - Vue的指令
一. Vue 的介绍 1. vue是一个 mvvm 的框架.(面试官经常会问的),angular 是 mvc的框架. 2. vm 是 vum 的实例,这个实例存在计算机内存中,主要干两件大事: 1. ...
- Vue.js 源码分析(二十三) 指令篇 v-show指令详解
v-show的作用是将表达式值转换为布尔值,根据该布尔值的真假来显示/隐藏切换元素,它是通过切换元素的display这个css属性值来实现的,例如: <!DOCTYPE html> < ...
- Vue.js 源码分析(二十二) 指令篇 v-model指令详解
Vue.js提供了v-model指令用于双向数据绑定,比如在输入框上使用时,输入的内容会事实映射到绑定的数据上,绑定的数据又可以显示在页面里,数据显示的过程是自动完成的. v-model本质上不过是语 ...
- Vue.js 源码分析(十九) 指令篇 v-html和v-text指令详解
双大括号会将数据解释为普通文本,而非 HTML 代码.为了输出真正的 HTML,你需要使用 v-html 指令,例如: <!DOCTYPE html> <html lang=&quo ...
- Vue.js 源码分析(十五) 指令篇 v-bind指令详解
指令是Vue.js模板中最常用的一项功能,它带有前缀v-,比如上面说的v-if.v-html.v-pre等.指令的主要职责就是当其表达式的值改变时,相应的将某些行为应用到DOM上,先介绍v-bind指 ...
- 更轻更快的Vue.js 2.0与其他框架对比(转)
更轻更快的Vue.js 2.0 崭露头角的JavaScript框架Vue.js 2.0版本已经发布,在狂热的JavaScript世界里带来了让人耳目一新的变化. Vue创建者尤雨溪称,Vue 2.0 ...
- vue自定义指令clickoutside使用以及扩展用法
vue自定义指令clickoutside使用以及扩展用法 产品使用vue+element作为前端框架.在功能开发过程中,难免遇到使用element的组件没办法满足特殊的业务需要,需要对其进行定制,例如 ...
随机推荐
- webpack4.26的详细配置,包含babel, eslint, postcss, 及各种所需loader,内含大量注释
github地址:https://github.com/qianxiaoning/demo-webpack4.26 内含详尽注释 欢迎大家star或者fork呀~ 目录结构: completeDemo ...
- Android Studio 2.3.3 出现Error:(26.13) Fail to resole: com.android.support.appcompat永久解决方法
Android Studio 出现Error(26.13):Fail to resole:com.android.support.appcompat-v7.28_ Install Repository ...
- bat脚本实现复制特定后缀文件到其他目录
@echo off for /r %%a in (*.txt) do copy %%a D:\1 pause 1.for /r主要用于搜索指定路径及其所有子目录中符合要求的文件(/r后如果没有指定目录 ...
- Jquery实现表单动态加减、ajax表单提交
一直在搞Java后台开发,记得刚工作那一两年时间搞过前后端交互开发,用的东西也是五花八门,当时觉得做页面展示给别人看,是很有成就的事情,不过现在感觉自己跟纯前端开发比起来弱爆了,不过如果你的目标是作为 ...
- Java实例 Part3:流程控制
目录 Example01:判断某一年是否为闰年 Example02:验证登录信息的合法性 Example03:判断用户输入月份的季节 Example04:使用while循环语句与自增运算符循环遍历数组 ...
- git向码云上提交项目
git向码云上提交项目 设置账号名字和邮箱 $ git config --global user.name "注册时账号的名字" $ git config --global use ...
- CentOS 7.2搭建xl2tp服务器
## 1.下载xl2tpd.tar.gz源码包 ```wget http://pkgs.fedoraproject.org/repo/pkgs/xl2tpd/xl2tpd-1.3.8.tar.gz/d ...
- 20155216 2016-2017-2 《Java程序设计》第二周学习总结
教材学习内容总结 类型 short占2字节 int占4字节 long占8字节 byte占1字节,可表示-128~127的整数 char占2字节 boolean不考虑占字节 float占4字节 doub ...
- 20155234 2016-2017-2 《Java程序设计》第1 周学习总结
20155234 2016-2017-2 <Java程序设计>第1 周学习总结 教材学习内容总结 第一周学习了第一章,第一章的内容等同于绪论,向我们介绍了jave的前世今生,以及三大平台. ...
- 2017-2018-1 20155318《信息安全技术》实验二——Windows口令破解
2017-2018-1 20155318<信息安全技术>实验二--Windows口令破解 一.实验原理 口令破解方法 口令破解主要有两种方法:字典破解和暴力破解. 字典破解是指通过破解者对 ...