自身熟悉 vue2,须要改写 vue1.x 项目,本篇文章简化了 vue 官网对于 v2 (2.x) 与 v1 (1.x) 的差别叙述。不少地方以 v2 的角度叙述。javascript
v2 每一个组件只容许有一个根元素,v1 容许一个组件有多个根元素vue
v1 | v2 |
---|---|
beforeCompile 移除 |
created |
compiled 替换 |
mounted |
attached 移除 |
mounted () { this.$nextTick(() => { // doSomething }) } |
detached 移除 |
destroyed () { this.$nextTick(() => { // doSomething }) } |
init 从新命名 |
beforeCreate |
ready 替换 |
mounted () { this.$nextTick(() => { // doSomething }) } |
v1 | v2 | |
---|---|---|
数组 | (index, value) | (value, index) |
对象 | (key, value) | (value, key) |
$index
和 $key
这两个隐式声明变量key 替换 track-by
v2 中的 :key
在 v1 中使用 track-by
指定,且 track-by 不用 v-bind 绑定,而是直接指定key名,如:java
<div v-for="item in items" track-by="id">
<div v-for="item in items" v-bind:key="item.id">
v1 | v2 | |
---|---|---|
number in 10 | 0-9 | 1-10 |
v1 中能够在 prop 内部定义 coerce
方法,用于将 prop 的值传递给组件前进行一些计算,组件内部获得的 prop 的值是 coerce 方法返回的值。数组
propG: { coerce: function (val) { return val + '' // cast the value to string } }
v2 使用 computed
替代缓存
v1 中设置 prop 的 twoWay
属性为 true,能够双向传递。函数
v1 中绑定 prop 时,可使用 .sync 和 .once 修饰符this
.sync
显示双向绑定 prop.once
prop 的值一旦被传递,父组件对该属性的变化将不会再同步到子组件v1 中能够修改 prop,v2 已经弃用了双向绑定
v1 中根实例能够有 props 属性,v2 中替代的是 propsDatacode
v2 中 computed 计算属性默认会被缓存,v1 中能够为计算属性添加一个 cache
属性,设置为 false,则会关闭缓存验证。component
v-bind 指令对于真假值的判断,v1 遵循 js 的通常规则,v2 中则只有 null、undefined、false 被看做是假,0 和 '' 则被视为真值。
此规则只限于 v-bind 指令,v-if 和 v-show 仍遵循 js 的规则
v1 中 v-on 指令能够监听原生事件, v2 中只监听自定义事件,若是须要监听原生事件,须要加上 .native 修饰符。
v1 中使用 v-model 指令的表单元素能够带有 debounce 属性,用于设置一个更新 model 的最小延迟时间。
<input v-model="msg" debounce="500">
这是控制了 状态更新的频率,而不是控制高耗时任务自己
v2 中的 .lazy、.number 修饰符,在 v1 中以标签属性的形式出现
<input v-model="name" lazy> <input v-model="age" type="number" number>
v2 中 v-model 的初值就是所绑定的 data 的值,可是在 v1 中,会用当前标签元素的 value 做为初值。
v1 中的 v-bind:style 能够添加 !important
,v2 中必须写成字符串形式。以下
// v1 <p v-bind:style="{ color: myColor + ' !important' }">hello</p> // v2 <p v-bind:style="'color: ' + myColor + ' !important'">hello</p>
v1 中能够分别使用 v-el 为 DOM 元素、v-ref 为 component 指定一个 name,方便调用该元素或组件实例,v2 中弃用了这两个指令,统一使用 ref='name'
的方式。
v1 中容许 v-show 与 v-else 一块儿使用,以下
// v1 <p v-if="foo">Foo</p> <p v-else v-show="bar">Not foo, but bar</p> // v2 <p v-if="foo">Foo</p> <p v-if="!foo && bar">Not foo, but bar</p>
未完待续。。。