vue.js學習筆記(四)--變化檢測問題
阿新 • • 發佈:2018-11-06
Vue追蹤變化是通過把一個普通 JavaScript 物件傳給 Vue 例項的 data 選項,Vue將遍歷此物件所有的屬性,並使用 Object.defineProperty 把這些屬性全部轉為 getter/setter。
當我們在宣告一個例項的過程中,所有的屬性必須要在data中提前宣告,只有在data中宣告的屬性才是響應式的。
var vm = new Vue({
data:{
a:1
}
})
// vm.a 是響應的
vm.b = 2
// vm.b 是非響應的
同時,如果某個屬性是一個object物件,那麼你也不能直接在其上進行屬性的操作,這是因為
Vue 不允許在已經建立的例項上動態新增新的根級響應式屬性(root-level reactive property)。然而它可以使用 Vue.set(object, key, value) 方法將響應屬性新增到巢狀的物件上:
Vue.set(vm.someObject, 'b', 2)
您還可以使用 vm.$set 例項方法,這也是全域性 Vue.set 方法的別名:
this.$set(this.someObject,'b',2)
有時你想向已有物件上新增一些屬性,例如使用 Object.assign() 或 _.extend() 方法來新增屬性。但是,新增到物件上的新屬性不會觸發更新。在這種情況下可以建立一個新的物件,讓它包含原物件的屬性和新的屬性:
// 代替 `Object.assign(this.someObject, { a: 1, b: 2 })`
this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })
(end)