關(guān)于vue中watch檢測到不到對象屬性的變化

前言

在vue開發(fā)的過程中發(fā)現(xiàn)一個問題:改變vue.$data中對象的屬性,watch是觀測不到變化,但其實對象的屬性是有變化的。這……,有點難以置信!

[歡迎點擊github原文評論指正]

正文

<template>
  <div>
    <dl>name: {{option.name}}</dl>
    <dl>age: {{option.age}}</dl>
    <dl>
      <button @click="updateAgeTo25">update age with 25</button>
    </dl>
  </div>
</template>

<script>
export default {
  data () {
    return {
      option: {
        name: "isaac",
        age: 24
      }
    }
  },
  watch: {
    option(val) {
      console.log(val)
    }
  },
  methods: {
    updateAgeTo25() {
      this.option.age = 25
    }
  }
}
</script>
image
image

如結(jié)果所示,option.age已經(jīng)更新,但是watch中的option函數(shù)并沒有被觸發(fā)。

vue的watch鉤子會那么雞肋?我是不信的了。

深層watch

  ...
  watch: {
    option: {
      handler(newVal) {
        console.log(newVal);
      },
      deep: true,
      immediate: true
    }
  },
  ...

需要深層watch就需要開啟deep屬性

image
image

如結(jié)果所示。

另外,你會發(fā)現(xiàn),在age沒有變化前也是有打印出option,這是因為開啟immediate屬性,設(shè)定為true,

該回調(diào)將會在偵聽開始之后被立即調(diào)用

[來自vue文檔的說明]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Vue 實例 屬性和方法 每個 Vue 實例都會代理其 data 對象里所有的屬性:var data = { a:...
    云之外閱讀 2,373評論 0 6
  • 今天電子競技行業(yè)中最大的新聞莫過于冰蛙發(fā)布消息,Dota將告別“6”時代,進入“7”時代,而這不是簡單的一個版本...
    _AshMessenger閱讀 447評論 0 6
  • 12.14日精進:敬畏—進入—體驗—交給—持續(xù) 1,缺啥補啥,怕啥練啥; 2,一切為我所用,所用為團隊家; 3,我...
    任武科閱讀 333評論 0 0
  • 深深的感恩父母的養(yǎng)育之恩,感恩父母昨天打電話叫我們過去吃飯,謝謝謝謝,深深的感恩今天坐車有個漂亮的美女給孩子讓座位...
    譚小華閱讀 491評論 0 0

友情鏈接更多精彩內(nèi)容