自身熟悉 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>
未完待續。。。