前言
記錄平時學到的知識,標題寫的大氣一點,也算是給自己一點鼓勵,希望在技術這條路可以遠走越遠,路越走越寬~
文中代碼地址
引入的文件文件說明
vue.js——開發版本:包含完整的警告和調試模式
vue.min.js——生產版本:刪除了警告,進行了壓縮
1. propsData Option 全局擴展的數據傳遞
propsData在實際開發中使用的并不多,用在全局擴展時進行傳遞數據,主要搭配Vue.extend使用。
在實際的項目中,使用全局擴展的方式制作自定義標簽比較少用,完全可以使用組件來替代。
propsData Option
propsData Option
全免费A级毛片免费看无码,亚洲色大成网站WWW久久九九,永久三级网站在线观看,95Pao国产成视频免费
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制
擴展標簽已經做好了,這時要在掛載時傳遞數據,就用到了propsData。
使用用propsData三步解決傳值:
-
在全局擴展里加入props進行接收;
-
傳遞時用propsData進行傳遞;
-
用插值的形式寫入模板;
完整代碼:
propsData Option
propsData Option
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制2.computed Option 計算選項
computed計算屬性的主要作用是在數據渲染之前,根據實際需求對數據進行處理,比如:大小寫轉換,順序重排,添加符號……。為了不污染data中定義的數據源,在computed里需要新聲明一個對象保存處理之后的數據。
computed計算屬性的所有getter和setter的this上下文自動地綁定為 Vue 實例。注意如果你為一個計算屬性使用了箭頭函數,則 this 不會指向這個組件的實例,不過你仍然可以將其實例作為函數的第一個參數來訪問。
computed: {
aDouble: vm => vm.a * 2
}
復制
計算屬性的結果會被緩存,除非依賴的響應式屬性變化才會重新計算。注意,如果某個依賴 (比如非響應式屬性) 在該實例范疇之外,則計算屬性是不會被更新的。
用計算屬性反轉新聞數據數組,讓最近發生的新聞放在前面顯示,demo:
computed 計算選項
computed 計算選項
{{newPrice}}
- {{item.title}} - {{item.date}}
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制
computed 計算屬性是非常有用并且在實際的項目開發中經常使用,它在輸出數據前可以根據實際項目需求對數據進行處理,改變數據。
3. methods Option 方法選項
在Vue中,可以使用v-on給元素綁定事件,在methods選項中處理一些邏輯方面的事情。在Vue中的邏輯處理,一般都在Vue的methods選項中來處理,那是因為很多事件處理邏輯代碼都很復雜,如果直接把JavaScript代碼寫在v-on指令中有時并不可行,所以在methods中定義方法,讓v-on指令來接收(調用)。
一個數字,每點擊一下按鈕加2:
methods Option
methods Option
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制
methods中參數的傳遞:
使用方法和正常的javascript傳遞參數的方法一樣,分為兩步:
-
在methods的方法中進行聲明,比如給add方法傳入一個num參數,就要寫出add (num){...};
-
調用方法時直接傳遞,比如要傳遞2這個參數,在button上就直接可以寫。;
給add添加num參數,并在按鈕上調用傳遞:
methods Option
methods Option
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制
這時,再點擊按鈕時結果每次加2。
methods中的$event參數:
傳遞的$event參數都是關于你點擊鼠標的一些事件和屬性。傳遞方法:
。
復制
這時候可以打印一下,看看event到底是個怎樣的對象。你會發現,它包含了大部分鼠標事件的屬性:
methods Option
methods Option
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制
native 給組件綁定構造器里的原生事件:
在實際開發中經常需要把某個按鈕封裝成組件,然后反復使用,如何讓組件調用構造器里的方法,而不是組件里的方法。就需要用到.native修飾器了。
把我們的add按鈕封裝成組件,聲明btn對象:
var btn={
template:``
}
復制
在構造器里注冊組件:
components:{
"btn":btn
}
復制
用.native修飾器來調用構造器里的add方法:
復制
完整代碼:
methods Option
methods Option
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制
作用域外部調用構造器里的方法:
這種不經常使用,如果你出現了這種情況,說明你的代碼組織不夠好。
復制
完整代碼:
methods Option
methods Option
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制4. Watch 選項 監控數據
使用watch選項來監控數據的變化。watch選項對應一個對象,鍵是觀察表達式,值是對應回調。值也可以是方法名,或者是對象,包含選項。在實例化時為每個鍵調用 $watch() 。
天氣預報的穿衣指數,它主要是根據溫度來進行提示,溫度大于26度時,建議穿T恤短袖,溫度小于26度大于0度時,建議穿夾克長裙,溫度小于0度時建議穿棉衣羽絨服:
watch Option
watch Option
今日溫度:{{temperature}}°C
穿衣建議:{{suggestion}}
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制
handler方法和immediate屬性:
這里 watch 的一個特點是,最初綁定的時候是不會執行的,要等到 temperature 改變時才執行監聽計算。那我們想要一開始就讓它最初綁定的時候就執行改怎么辦呢?我們需要修改一下我們的 watch 寫法,修改過后的 watch 代碼如下:
watch Option
watch Option
今日溫度:{{temperature}}°C
穿衣建議:{{suggestion}}
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制
注意到handler了嗎,我們給 temperature 綁定了一個handler方法,之前我們寫的 watch 方法其實默認寫的就是這個handler,Vue.js會去處理這個邏輯,最終編譯出來其實就是這個handler。
而immediate:true代表如果在 wacth 里聲明了 temperature 之后,就會立即先去執行里面的handler方法,如果為 false就跟我們以前的效果一樣,不會在綁定的時候就執行。
在上面的事例中把suggestion的初始數據設置為'T恤短袖',而初始溫度是14°C,這時如果沒有讓watch在最初綁定的時候就執行,那么推薦的穿衣就有問題,因為14°C原本是推薦穿'夾克長裙'的,通過讓watch在最初綁定的時候就執行完美解決了這個問題。
deep屬性: watch 里面還有一個屬性 deep,默認值是 false,代表是否深度監聽,比如我們 data 里有一個obj屬性:
watch Option
watch Option
今日溫度:{{obj.temperature}}°C
穿衣建議:{{obj.suggestion}}
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制
當我們在點擊添加溫度和減少溫度按鈕改變obj.temperature的值時,發現是無效的。受現代 JavaScript 的限制 (以及廢棄 Object.observe),Vue 不能檢測到對象屬性的添加或刪除。由于 Vue 會在初始化實例時對屬性執行 getter/setter 轉化過程,所以屬性必須在 data 對象上存在才能讓 Vue 轉換它,這樣才能讓它是響應的。
默認情況下 handler 只監聽obj這個屬性它的引用的變化,我們只有給obj賦值的時候它才會監聽到,比如我們在 mounted事件鉤子函數中對obj進行重新賦值:
mounted: {
this.obj = {
temperature: 40,
suggestion:'T恤短袖'
}
}
復制
這樣我們的 handler 才會執行。
如果需要監聽obj里的屬性temperature的值,這時候deep屬性就派上用場了:
watch: {
obj: {
handler(newVal, oldVal) {
console.log('obj.a changed', newVal.temperature)
if(newVal.temperature>=26){
this.obj.suggestion=suggestion[0];
}else if(newVal.temperature<26 && newVal.temperature >=0)
{
this.obj.suggestion=suggestion[1];
}else{
this.obj.suggestion=suggestion[2];
}
console.log('obj.a 2', newVal.suggestion)
},
immediate: true,
deep: true
}
}
復制
deep的意思就是深入觀察,監聽器會一層層的往下遍歷,給對象的所有屬性都加上這個監聽器,但是這樣性能開銷就會非常大了,任何修改obj里面任何一個屬性都會觸發這個監聽器里的 handler。
優化,可以使用字符串形式監聽:
watch: {
'obj.temperature': {
handler(newVal, oldVal) {
console.log('obj.a changed', newVal)
if(newVal>=26){
this.obj.suggestion=suggestion[0];
}else if(newVal<26 && newVal >=0)
{
this.obj.suggestion=suggestion[1];
}else{
this.obj.suggestion=suggestion[2];
}
console.log('obj.a 2', this.obj.suggestion)
},
immediate: true,
deep: true
}
}
復制
這樣Vue.js才會一層一層解析下去,直到遇到屬性temperature,然后才給temperature設置監聽函數。
完整代碼:
watch Option
watch Option
今日溫度:{{obj.temperature}}°C
穿衣建議:{{obj.suggestion}}
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制
用實例屬性寫watch監控:
有些時候我們會用實例屬性的形式來寫watch監控。也就是把我們watch卸載構造器的外部,這樣的好處就是降低我們程序的耦合度,使程序變的靈活:
watch Option
watch Option
今日溫度:{{temperature}}°C
穿衣建議:{{suggestion}}
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制
注銷watch:
為什么要注銷 watch?因為我們的組件是經常要被銷毀的,比如我們跳一個路由,從一個頁面跳到另外一個頁面,那么原來的頁面的 watch 其實就沒用了,這時候我們應該注銷掉原來頁面的 watch 的,不然的話可能會導致內置溢出。當把 watch 寫在組件的選項中的,它會隨著組件的銷毀而銷毀。
但是,如果我們使用上面的這樣的方式寫 watch:
app.$watch('temperature',function(newVal,oldVal){
if(newVal>=26){
this.suggestion=suggestion[0];
}else if(newVal<26 && newVal >=0)
{
this.suggestion=suggestion[1];
}else{
this.suggestion=suggestion[2];
}
})
復制
那么就要手動注銷了,這種注銷其實也很簡單:
var unwatch = app.$watch('temperature',function(newVal,oldVal){
if(newVal>=26){
this.suggestion=suggestion[0];
}else if(newVal<26 && newVal >=0)
{
this.suggestion=suggestion[1];
}else{
this.suggestion=suggestion[2];
}
})
unWatch(); // 手動注銷watch
復制
app.$watch調用后會返回一個值,就是unWatch方法,你要注銷 watch 只要調用unWatch方法就可以了。
5. mixins 混入選項
混入 (mixins) 是一種分發 Vue 組件中可復用功能的非常靈活的方式?;烊雽ο罂梢园我饨M件選項。當組件使用混入對象時,所有混入對象的選項將被混入該組件本身的選項。
mixins一般有兩種用途:
-
在你已經寫好了構造器后,需要增加方法或者臨時的活動時使用的方法,這時用混入會減少源代碼的污染。
-
很多地方都會用到的公用方法,用混入的方法可以減少代碼量,實現代碼重用。
現在有個數字點擊遞增的程序,假設已經完成了,這時希望每次數據變化時都能夠在控制臺打印出提示:“數據發生變化”:
Mixins Option
Mixins Option Demo
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制
選項合并:
當組件和混入對象含有同名選項時,這些選項將以恰當的方式混合,合并規則:
-
值為對象的選項,例如數據對象data、方法對象methods、組件對象components和自定義指令對象directives,將被混合為同一個對象。兩個對象鍵名沖突時,取組件對象的鍵值對。
Mixins Option
Mixins Option Demo
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制
打開控制臺可以看到,混入的created鉤子函數和實例的created鉤子函數打印出的this.$data都為{bar: "def", foo: "abc", message: "goodbye", num: 1}。
-
由1的例子可以看出,同名鉤子函數將混合為一個數組,因此都將被調用。另外,混入對象的鉤子將在組件自身鉤子之前調用。
mixins的調用順序:
從執行的先后順序來說,都是混入的先執行,然后構造器里的再執行,需要注意的是,這并不是方法的覆蓋,而是被執行了兩邊。
同名鉤子函數將混合為一個數組,因此都將被調用?;烊雽ο蟮你^子將在組件自身鉤子之前調用。
全局API混入方式:
可以全局注冊混入對象。但應注意使用!因為一旦使用全局混入對象,將會影響到所有之后創建的 Vue 實例。
定義全局的混入,然后在需要這段代碼的地方直接引入js,就可以擁有這個功能了:
Vue.mixin({
updated:function(){
console.log('我是全局被混入的');
}
})
復制
注意:全局混入的執行順序要前于混入和構造器里的方法。
完整代碼:
Mixins Option
Mixins Option Demo
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制6. extends Option 擴展選項
通過外部增加對象的形式,對構造器進行擴展。允許聲明擴展另一個組件(可以是一個簡單的選項對象或構造函數),而無需使用 Vue.extend。這主要是為了便于擴展單文件組件。和 mixins 類似。
選項合并:
當組件和擴展對象含有同名選項時,這些選項將以恰當的方式混合,合并規則:
-
值為對象的選項,例如數據對象data、方法對象methods、組件對象components和自定義指令對象directives,將被混合為同一個對象。兩個對象鍵名沖突時,取組件對象的鍵值對。
-
同名鉤子函數將混合為一個數組,因此都將被調用。另外,擴展對象的鉤子將在組件自身鉤子之前調用。
完整代碼:
Extends Optin
Extends Optin Demo
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制
打開控制臺可以看到,擴展出來的鉤子函數先執行,然后是實例的鉤子函數;點擊按鈕之后只有實例的方法被執行。
7. delimiters 選項
delimiters的作用是改變插值的符號。Vue默認的插值是雙大括號{{}}。但有時我們會有需求更改這個插值的形式。
比如后臺渲染模板如swig,也使用“{{ }}“作為渲染,與前端vue的數據綁定“Mustache”語法 (雙大括號)產生沖突,此時只要在新建Vue對象時,添加delimiters: ['${', '}'],就搞定了。
現在插值形式就變成了${}。
delimiters Option
delimiters Option
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<蜘蛛词>|
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
<文本链>
復制