安裝vue migration工具
npm install -g vue-migration-helper
vue-migration-helper src //掃描src目錄下的所有文件
https://www.npmjs.com/package/vue-migration-helper
官方遷移文檔
http://cn.vuejs.org/v2/guide/migration.html
1. ready生命周期方法被移除(包括組件及頁(yè)面)征绎,替換為:
mounted: function () {
this.$nextTick(function () {
//代碼保證this.$el在document中
})
}
2. v-for的變更
遍歷數(shù)組:包含index時(shí)挺智,之前遍歷數(shù)組時(shí)的參數(shù)順序是(index, value)∶蚕Γ現(xiàn)在是(value, index)厂画,來(lái)和JavaScript的原生數(shù)組方法(例如forEach和map)保持一致州泊。
遍歷對(duì)象:當(dāng)包含key時(shí)冶共,之前遍歷對(duì)象的參數(shù)順序是(key, value)∈粗現(xiàn)在是(value, key),來(lái)和常見(jiàn)的對(duì)象迭代器(例如lodash)保持一致翅睛。
*已經(jīng)移除了$index和$key
track-by已經(jīng)替換為key,原來(lái):
track-by="id">声搁,現(xiàn)在
3. v-bind的.once和.sync修飾符移除
4.Props現(xiàn)在只能單向傳遞黑竞。為了對(duì)父組件產(chǎn)生反向影響,子組件需要顯式地傳遞一個(gè)事件而不是依賴(lài)于隱式地雙向綁定疏旨。
5.修改Props棄用
組件內(nèi)修改prop是反模式(不推薦的)的很魂。比如,先聲明一個(gè)prop充石,然后在組件中通過(guò)this.myProp =
'someOtherValue'改變prop的值莫换。根據(jù)渲染機(jī)制,當(dāng)父組件重新渲染時(shí)骤铃,子組件的內(nèi)部prop值也將被覆蓋。
大多數(shù)情況下坷剧,改變prop值可以用以下選項(xiàng)替代:
通過(guò)data屬性惰爬,用prop去設(shè)置一個(gè)data屬性的默認(rèn)值。
通過(guò)computed屬性惫企。
6.用v-on監(jiān)聽(tīng)原生事件變更
現(xiàn)在在組件上使用v-on只會(huì)監(jiān)聽(tīng)自定義事件(組件用$emit觸發(fā)的事件)撕瞧。如果要監(jiān)聽(tīng)根元素的原生事件,可以使用.native修飾符狞尔,比如:
7.帶有-debounce-的-v-model移除
http://cn.vuejs.org/v2/guide/migration.html#帶有-debounce-的-v-model移除
8.帶有!important的v-bind:style移除
這樣寫(xiě)將失效:
hello
如果確實(shí)需要覆蓋其它的!important丛版,最好用字符串形式去寫(xiě):
hello
9.v-el和v-ref替換
簡(jiǎn)單起見(jiàn),v-el和v-ref合并為一個(gè)ref屬性了偏序,可以在組件實(shí)例中通過(guò)$refs來(lái)調(diào)用页畦。這意味著v-el:my-element將寫(xiě)成這樣:ref="myElement",v-ref:my-component變成了這樣:ref="myComponent"研儒。綁定在一般元素上時(shí)豫缨,ref指DOM元素,綁定在組件上時(shí)端朵,ref為一組件實(shí)例好芭。
因?yàn)関-ref不再是一個(gè)指令了而是一個(gè)特殊的屬性,它也可以被動(dòng)態(tài)定義了冲呢。這樣在和v-for結(jié)合的時(shí)候是很有用的:
10.自定義指令簡(jiǎn)化
在新版中舍败,指令的使用范圍已經(jīng)大大減小了:現(xiàn)在指令僅僅被用于低級(jí)的DOM操作。大多數(shù)情況下敬拓,最好是把模板作為代碼復(fù)用的抽象層邻薯。
顯要的改變有如下幾點(diǎn):
指令不再擁有實(shí)例。意思是恩尾,在指令的鉤子函數(shù)中不再擁有實(shí)例的this弛说。替代的是,你可以在參數(shù)中接受你需要的任何數(shù)據(jù)翰意。如果確實(shí)需要木人,可以通過(guò)el來(lái)訪問(wèn)實(shí)例信柿。
類(lèi)似acceptStatement,deep醒第,priority等都已被棄用渔嚷。為了替換雙向指令,見(jiàn)示例稠曼。
現(xiàn)在有些鉤子的意義和以前不一樣了形病,并且多了兩個(gè)鉤子函數(shù)。
幸運(yùn)的是霞幅,新鉤子更加簡(jiǎn)單漠吻,更加容易掌握。詳見(jiàn)自定義指令指南司恳。
http://cn.vuejs.org/v2/guide/custom-directive.html
11.指令.literal修飾符移除
.literal修飾符已經(jīng)被移除途乃,為了獲取一樣的功能,可以簡(jiǎn)單地提供字符串修飾符作為值扔傅。
示例耍共,如下更改:
只是:
12.屬性?xún)?nèi)部的計(jì)算插值移除
屬性?xún)?nèi)部的計(jì)算插值已經(jīng)不能再使用了:
< div class="btn btn-{{ size }}" >
應(yīng)該寫(xiě)成行內(nèi)表達(dá)式:
< div v-bind:class="'btn btn-'+ size " >
或者計(jì)算屬性:
computed: {
buttonClasses: function () {
return 'btn btn-' + size
}
}
13.HTML計(jì)算插值移除
HTML的計(jì)算插值({{{ foo }}})已經(jīng)移除,取代的是v-html指令.
14.替換vm.$data移除
現(xiàn)在禁止替換實(shí)例的$data猎塞。這樣防止了響應(yīng)系統(tǒng)的一些極端情況并且讓組件狀態(tài)更加可控可預(yù)測(cè)(特別是對(duì)于存在類(lèi)型檢查的系統(tǒng))试读。
過(guò)濾器
1.過(guò)濾器參數(shù)符號(hào)變更
現(xiàn)在過(guò)濾器參數(shù)形式可以更好地與js函數(shù)調(diào)用方式一致,因此不用再用空格分隔參數(shù):
{{ date | formatDate 'YY-MM-DD' timeZone }}
現(xiàn)在用圓括號(hào)括起來(lái)并用逗號(hào)分隔:
{{ date | formatDate('YY-MM-DD', timeZone) }}
2.現(xiàn)在過(guò)濾器只能用在插入文本中({{ }}tags)荠耽。我們發(fā)現(xiàn)在指令(如:v-model钩骇,v-on等)中使用過(guò)濾器使事情變得更復(fù)雜。像v-for這樣的列表過(guò)濾器最好把處理邏輯作為一個(gè)計(jì)算屬性放在js里面骇塘,這樣就可以在整個(gè)模板中復(fù)用伊履。
總之,能在原生js中實(shí)現(xiàn)的東西款违,我們盡量避免引入一個(gè)新的符號(hào)去重復(fù)處理同樣的問(wèn)題唐瀑。
3.內(nèi)置的過(guò)濾器被移除:filterBylimitBydebounceorderBycurrencyuppercasejson等
自己在遷移項(xiàng)目時(shí)遇到的坑:
1.0里v-model可以直接加過(guò)濾器,2.0里取消了插爹,不可以在v-model里增加過(guò)濾
頁(yè)面上一些書(shū)寫(xiě)錯(cuò)誤可能就導(dǎo)致Failed to
generate render function渲染功能失敗哄辣,可能是因?yàn)橐粋€(gè)逗號(hào)或者別的書(shū)寫(xiě)錯(cuò)誤都可能導(dǎo)致渲染失敗
vue2.0不支持vueTouch
v-for="item in coupons|filterBy 1 in 'isAvailable'"現(xiàn)在寫(xiě)法v-for="item in coupons"
v-if="item.isAvailable==1"
如果在組件中定義了this.$emit('close'),在組件外引用的時(shí)候一點(diǎn)要@close="showArea
= false"不然不起作用
在輸入框組件上寫(xiě)v-model無(wú)效先聚焦一下才能用
一定要做空指針判斷
傳到組件里的變量不能做運(yùn)算赠尾,帖子詳情頁(yè)評(píng)論數(shù)增加問(wèn)題力穗,不能實(shí)時(shí)增加,在回調(diào)里增加