我們知道定義一個vue實例,最基本的參數有el(指定掛載的DOM元素),data(實例的數據)。
但是,還有很多參數等着我們去認識。今天,我們就來認識幾個重要的參數。
1.計算屬性(computed)
計算屬性很強大,因為它會隨着其他屬性動態的去更新。
例子1:簡單的加法:
index.html中再進行渲染
即可得到結果:
除了簡單的加減法,computed還可以有很多作用:比如官方文檔里的字符倒敘。
例子2:
還可以刪除字符屬性等等。
例子3:
這里除了用到了computed屬性,還用到了雙向綁定,利用v-model,后面將v-model時再詳細講v-model的雙向綁定。
2.方法屬性(methods)
在方法屬性中,我們定義一些方法,讓組件來使用。
比如:定義一個數據a。使用戶每點擊按鈕的時候,a的值就要加1.我們就可以利用methods來實現。
結果如下圖:
3.watch觀察方法:
watch選項是Vue提供的用於檢測指定的數據發生改變的api。
上面點擊按鈕a的值加1的例子,不就是數據發生變化了嗎?我們就用watch選項來監聽數字a是否發生了變化,如果了監聽到了變化,我們就在控制台輸入以下a的最新值。
結果:
4.filter過濾器
注意:在渲染時,通過管道符 | 把函數toInt放在變量后面即可,num會作為參數value傳入toInt(value)方法里。
其實,這幾個方法是有很多相似的。
#計算屬性緩存 vs 方法
我們可以將同一函數定義為一個方法而不是一個計算屬性。兩種方式的最終結果確實是完全相同的。然而,不同的是計算屬性是基於它們的依賴進行緩存的。計算屬性只有在它的相關依賴發生改變時才會重新求值。
相比之下,每當觸發重新渲染時,調用方法將總會再次執行函數。
我們為什么需要緩存?假設我們有一個性能開銷比較大的計算屬性 A,它需要遍歷一個巨大的數組並做大量的計算。然后我們可能有其他的計算屬性依賴於 A 。如果沒有緩存,我們將不可避免的多次執行 A 的 getter!如果你不希望有緩存,請用方法來替代。
# 計算屬性 vs 偵聽屬性
Vue 提供了一種更通用的方式來觀察和響應 Vue 實例上的數據變動:偵聽屬性。當你有一些數據需要隨着其它數據變動而變動時,你很容易濫用 watch
——特別是如果你之前使用過 AngularJS。然而,通常更好的做法是使用計算屬性而不是命令式的 watch
回調。細想一下這個例子:
上面代碼是命令式且重復的。將它與計算屬性的版本進行比較:
好得多了,不是嗎?
我認為一些簡單的監聽事件,可以用watch,復雜一點的還是用計算方法把~