當Vue中的數據發生變化時,Vue會通過重新渲染來更新DOM,但是有時候我們需要動態更新一些對象屬性。Vue提供了一些方法來實現對象屬性的更新,包括響應式屬性、對象變異方法和$set方法。
//響應式屬性 var data = { msg: "Hello World" } var vm = new Vue({ data: data }) vm.msg = "Hello Vue" // data.msg 也會變成"Hello Vue"
Vue會劫持對象的getter和setter,使得修改數據時能夠實時更新DOM。當我們修改vm.msg的值時,由于msg被Vue的響應式系統所監控,所以data.msg的值也被更新了。這就是Vue的一大特點,能夠實時響應數據的變化。
//對象變異方法 var data = { items: [1, 2, 3, 4, 5] } var vm = new Vue({ data: data }) vm.items.push(6) // data.items 變成 [1, 2, 3, 4, 5, 6]
Vue還提供了一些變異方法,如push、pop、shift、unshift、splice、sort和reverse方法。這些方法會修改原始數據,并且在DOM中進行實時更新。例如,我們在Vue中調用items.push(6)方法,由于Vue已經劫持了數組的變異方法,所以會直接在原始數據中添加元素,并且實時更新DOM。
//$set 方法 var data = { items: [1, 2, 3, 4, 5] } var vm = new Vue({ data: data }) vm.$set(data.items, 6, 6) // data.items 變成 [1, 2, 3, 4, 5, undefined, 6]
但是,如果我們需要更新某個對象的屬性,又該怎么辦呢?這個時候,$set方法就派上用場了。$set 方法能夠通過Vue的響應式系統,將新增的對象屬性變成響應式的數據,從而實現實時更新DOM。例如,我們調用$set方法向一個數組中添加新元素,由于它是響應式數據,所以能夠實時更新DOM。