1. 程式人生 > >vue.js學習筆記(四)--變化檢測問題

vue.js學習筆記(四)--變化檢測問題

部落格地址:https://fisher-zh.github.io

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)