Vue 的資料與方法。
Data 資料
資料 data
選項是用來儲存 Vue 實體的資料/狀態。接受一個物件或是 function
形式的物件(元件限制)。
1. data
當一個 Vue 實體被建立時,它會將 data
物件中的所有屬性加入到 Vue 的 響應式系統 中,從而讓 data
的屬性能夠響應式更新。
舉例來說,我們定義個資料屬性 message
:
|
|
這個資料屬性就可以在實體對應的 Vue App 中進行使用。
我們能用 Vue 的模板語法 Mustache 將資料呈現在畫面上:
|
|
若資料屬性的值發生改變時,畫面將會產生「響應」,即匹配更新為新的值。
例如,新增一個用來改變 message
值的按鈕:
|
|
data
中的屬性才是響應式的,這部分我們會在 資料無法響應 中說明。
2. 訪問資料
Vue 實體建立之後,我們可以使用 $data
來訪問資料物件。
另外 Vue 實體也代理了 data
物件上所有的屬性,因此訪問 vm.message
等同訪問 vm.$data.message
。
|
|
3. Object.freeze()
Vue 會遍歷 data
中的所有屬性,並使用 Object.defineProperty
將屬性做 getter、setter 改造,以便監控狀態的更新(響應式更新)。
|
|
我們印出來觀察,就會發現資料物件已經不是原來的普通物件:
若是使用 Object.freeze()
將物件凍結,這會阻止 Vue 修改屬性,也就說它將不會響應式更新。
這有什麼好處?若今天有一筆資料,只是純展示用的,根本不需要對它進行監聽,這時就可以使用 Object.freeze()
來提升性能。另一種做法是,將這筆資料放進 computed
屬性中,因為 computed
屬性只有依賴的響應式屬性變化才會重新計算。
有人會問,為什不直接放在全域呢?因為放在全域就不能用於模板語法上了。
4. 內建屬性
Vue 內建的實體屬性與方法。它們都有前綴 $
以便與用戶定義的屬性區分開來。
因此在 data
資料物件內,以 _
或 $
開頭的屬性不會被 Vue 實體代理,因為它們可能衝突。
Methods 方法
methods
選項,就是用來存放函式的,也就是方法,和一般的函式沒有區別。
1. methods
定義方法:
|
|
這裡的 this
自動綁定為 Vue 實體(也就是 vm
),因此可以透過 this
取得 data
資料物件內的屬性。
我們也可以直接在 Mustache 語法中呼叫方法:
|
|
雖然在 Mustache 語法中使用方法,也會根據依賴的響應式屬性變化重新計算,但它沒有緩存,所以重複使用會重複計算。
CodePen Demo:Vue 2.x - Methods
methods
基本上沒什麼特別的,唯一要注意的,就是不要使用箭頭函式(arrow function)定義方法,因為會改變 this
的指向。
更多關於 methods
應用,會在事件綁定中提到。
2. 訪問方法
methods
中的方法將被混入到 Vue 實體中,可以直接訪問這些方法:
|
|
所以我們要在另一個方法中呼叫其他方法,也是使用 this
。
|
|