其實學習vue最好的辦法就是看vue的官方文檔,因此我寫這個主要是想記錄下學習的心路歷程[手動滑稽],順便加深下印象。vue
因爲 JavaScript 的限制,Vue 不能檢測如下變更的數組:vm.items[indexOfItem] = newValue
當你修改數組的長度時,例如:vm.items.length = newLength
// Vue.set Vue.set(vm.items, indexOfItem, newValue) // Array.prototype.splice vm.items.splice(indexOfItem, 1, newValue)
向響應式對象中添加一個屬性,並確保這個新屬性一樣是響應式的,且觸發視圖更新。它必須用於向響應式對象上添加新屬性,由於 Vue 沒法探測普通的新增屬性 (好比 this.myObject.newProperty = 'hi')api
注意對象不能是 Vue 實例,或者 Vue 實例的根數據對象。
咱們首先須要瞭解的是Vue 響應式原理的實現數組
Object.defineProperty 是僅 ES5 支持,且沒法 shim 的特性,這也就是爲何 Vue 不支持 IE8 以及更低版本瀏覽器的緣由。
到此,這個問題基本上就有答案了。瀏覽器
補充異步
Object.observe() 方法用於異步地監視一個對象的修改。當對象屬性被修改時,方法的回調函數會提供一個有序的修改流。然而,這個接口已經被廢棄並從各瀏覽器中移除。你能夠使用更通用的 Proxy 對象替代。
Object.observe(obj, callback[, acceptList])函數
- callback 當對象被修改時觸發的回調函數,其參數爲:
changes 一個數組,其中包含的每個對象表明一個修改行爲。每一個修改行爲>的對象包含:學習
- name: 被修改的屬性名稱。
- object: 修改後該對象的值。
- type: 表示對該對象作了何種類型的修改,可能的值爲"add", "update", or "delete"。
- oldValue: 對象修改前的值。該值只在"update"與"delete"有效。
- acceptList 在給定對象上給定回調中要監視的變化類型列表