解決vue修改對象時,視圖不同步的問題

我們先來看一段代碼

<p>{{testObj.a}}</p>
...
data () {
    return {
        testObj: { a: 1 }
    }
},
methods: {
    changeVal () {
          this.testObj.a = 2
          console.log(this.testObj.a)  //2
    }
}

在執行changeVal方法后,我們理想中的結果是視圖中的1變成2
而事實上這樣改變對象的屬性值,雖然可以改變它的值,卻不會觸發視圖的更新
正確的做法應該使用vue提供的全局方法Vue.set(在組件中可以使用this.$set)

<p>{{testObj.a}}</p>
...
data () {
    return {
        testObj: { a: 1 }
    }
},
methods: {
    changeVal () {
          this.$set( this.textObj, 'a', 2)
          console.log(this.testObj.a)  //2
    }
}

除此之外vue還提供Vue.delete(在組件中可以使用this.$delete)用于刪除對象的屬性

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,886評論 18 139
  • 1.安裝 可以簡單地在頁面引入Vue.js作為獨立版本,Vue即被注冊為全局變量,可以在頁面使用了。 如果希望搭建...
    Awey閱讀 11,087評論 4 129
  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內容,還有我對于 Vue 1.0 印象不深的內容。關于...
    云之外閱讀 5,074評論 0 29
  • 也許你遇上過這樣的事情: 在家里,孩子打了一下午游戲,你生氣地罵:都玩一下午了,還要不要命啊?不能花點時間去學習嗎...
    一顆麥稻閱讀 128評論 0 0
  • “是的,你錯過了一個億。” 當然,這只是句玩笑話,不過,這句話在有些時候卻很符合自己當時的心境。 這兩句話最開始見...
    雪飛鵝閱讀 183評論 6 3