转载请注明出处:http://blog.csdn.net/hnytdangyao/article/details/78339432.
本文出自 [ 党耀的博客 ]参考自 [Vue官网]
官方提供的基于Vue的路由器,使得构建单页面应用变得非常简单,只需要简单的组件配置和路由映射即可
类似Flux和Redux这两个数据状态管理工具,将整个应用的状态数据存储在一个单例store中,通过约定的方式进行获取,修改。
vue-resource是提供异步请求的插件,可以使用XMLHttpRequest和JSONP发送请求,并且支持Promise和请求拦截。
vue-devtools是用于调试Vue应用的Chrome插件,可以实时查看组件的状态,使用vuex的话还可以查看store的各种状态。
1.vue通过构造函数创建根实例。所有的 Vue.js 组件其实都是被扩展的 Vue 实例。
2.Vue 实例在被创建之前都有一个初始化过程。在这个过程中,实例会调用一些 生命周期钩子 ,可以在这里执行自定义逻辑。
beforeCreate:实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。
created:实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。
beforeMount:在挂载开始之前被调用:相关的 render 函数首次被调用。该钩子在服务器端渲染期间不被调用。
mounted:el被新创建的vm.$el替换,并挂载到实例上去之后调用该钩子。如果root实例挂载了一个文档内元素,当mounted被调用时vm.$el 也在文档内。该钩子在服务器端渲染期间不被调用。
beforeUpdate:数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。该钩子在服务器端渲染期间不被调用
updated:由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态。如果要相应状态改变,通常最好使用计算属性或 watcher 取而代之。该钩子在服务器端渲染期间不被调用。
activated:keep-alive 组件激活时调用。该钩子在服务器端渲染期间不被调用。
deactivated:keep-alive 组件停用时调用。该钩子在服务器端渲染期间不被调用。
beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。该钩子在服务器端渲染期间不被调用。
destroyed:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。
1.文本
数据绑定{{msg}},可以动态绑定更新
利用 v-once 指令,你也能执行一次性地插值,当数据改变时,插值处的内容不会更新。但是会影响到该节点上所有的数据绑定。
2.HTML
输出真正的 HTML ,需要使用 v-html 指令。但是不能使用 v-html 来复合局部模板,对于用户界面(UI),组件更适合作为可重用和可组合的基本单位。
注意:
你的站点上动态渲染的任意 HTML 可能会非常危险,因为它很容易导致 XSS 攻击。请只对可信内容使用 HTML 插值,绝不要对用户提供的内容插值。
2.特性
作用在 HTML 特性上,遇到这种情况应该使用 v-bind 指令,
<div v-bind:id="dynamicId">div>
3.使用JavaScript表达式
每个绑定都只能包含单个表达式,所以下面的例子都不会生效:
{{ var a = 1 }}
{{ if (ok) { return message } }}
是带有 v- 前缀的特殊属性。指令属性的值预期是单个 JavaScript 表达式(v-for 是例外情况,稍后我们再讨论)。指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。
if="seen">现在你看到我了
//v-if指令接收的是true/false,根据值来插入/移除元素
1.参数
一些指定能够接收一个参数,类似响应式更新HTML属性。这里href就是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。
还有v-on 指令,它用于监听 DOM 事件:
<a v-on:click="doSomething">
2.修饰符
修饰符(Modifiers)是以半角句号 . 指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。深入地了解 v-on 与 v-model时,会看到更多修饰符的使用。
总结:过滤器滤就是像网般一层一层过滤数据,所以要放在表达式尾部,并且前面表达式的值作为过滤器函数的第一个参数。允许多个过滤器串联使用。
Vue.js 允许自定义过滤器,使用场景:用于文本转换。过滤器可以用在两个地方:mustache 插值和 v-bind 表达式。过滤器应该被添加在 JavaScript 表达式的尾部。注意,对于复杂数据的转换,应该使用计算属性。
{{ message | filterA(‘arg1’, arg2) }} message的值为过滤器第一个参数,’arg1‘为第二个,arg2第三个。
v- 前缀作为一种视觉提示。Vue.js 为 v-bind 和 v-on 这两个最常用的指令,提供了特定简写:
<a v-bind:href="url">a>
<a :href="url">a>
<a v-on:click="doSomething">a>
<a @click="doSomething">a>
在模板中放入过多的逻辑会让模板过重难以维护,这就是为什么vue规定了数据绑定只能使用一种表达式。
1.计算属性的基础例子
vue.computed是一种计算属性,在模板里已经绑定了依赖关系,当原始数据发生变化时候才会调用。
2.计算属性VS Methods
将同一函数定义为method 而不是计算属性,对于最终的结果,两种方式是相同的。
不同的是计算属性是基于它们的依赖进行缓存的。计算属性只在它的相关依赖发生改变时才重新求值。只要 message 还没有发生改变,多次访问 reversedMessage 计算属性也不会重新计算,而是返回之前的结果。
而method,只要重新渲染,method就会执行该函数。
3,计算属性 VS Watched属性
watched 是vue提供的一个观察和相应vue实例变化的通用方式,不要滥用这个属性,通常更好的想法是使用 computed 属性而不是命令式的 watch 回调。
代码简洁。
计算属性在绑定在div上时return值有限制??? 目前如果用true/false判断可行,字符串就判断失败
4.计算属性默认只有getter方法,但是有需要可以自定义setter
5.观察Watchers
当需要在数据变化时执行异步操作或开销大的操作,可以用watchers。watch 允许执行异步操作 (访问一个 API),限制执行该操作的频率,并在得到最终结果前,设置中间状态。这是计算属性无法做到的。
1.绑定HTML Class
在 v-bind 用于 class 和 style 时, Vue.js 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。
详见:
对象语法
数组语法
用在组件上,当你在一个定制的组件上用到 class 属性的时候,这些类将被添加到根元素上面,这个元素上已经存在的类不会被覆盖.
2.绑定内联样式
自动添加前缀
当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform,Vue.js 会自动侦测并添加相应的前缀
多重值(适用版本2.3.0+)
从 2.3.0 起你可以为 style 绑定中的属性提供一个包含多个值的数组,常用于提供多个带前缀的值。这会渲染数组中最后一个被浏览器支持的值。
这里提到了Handlebars.js这个模板引擎
v-if
在vue.js中通过v-if指令来做判断,如果想要切换多元素,可以直接添加在template上,将它作为一个包装元素。
v-else
用来表示else块,必须紧跟在 v-if 或者 v-else-if 元素的后面——否则它将不会被识别。
v-else-if
在2.1.0新增,可以链式的使用,类似于 v-else,v-else-if 必须紧跟在 v-if 或者 v-else-if 元素之后。
关于复用,vue本身会复用已有元素而不是重新渲染,可以用key来管理复用的元素。
<template v-if="loginType === 'username'">
<label>Usernamelabel>
<input placeholder="Enter your username">
template>
<template v-else>
<label>Emaillabel>
<input placeholder="Enter your email address">
template>
<input> 不会被替换掉——仅仅是替换了它的 placeholder,在input标签添加属性key=“”;就可以控制不复用。
对比:
其实就相当于android里的gone/invisible 。v-if 当值为false时就相当于gone ,不保留view占用的空间,js里就是不去渲染,只有当值为true才会渲染该块。v-show会不管初始条件是什么都会去渲染。如果频繁的切换状态就用show.
当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级。
学无止境,未完待续