欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue中watch監(jiān)聽不到變化的解決

 更新時間:2023年01月05日 08:31:54   作者:尤雨溪不懂VUE  
本文主要介紹了vue中watch監(jiān)聽不到變化的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

watch監(jiān)聽不到對象內(nèi)部的變化

有的時候vue會出現(xiàn)這種現(xiàn)象,無法監(jiān)聽到復雜對象內(nèi)部的變化:當對象里面原本有某一個屬性,并對這個屬性操作時,watch是可以監(jiān)聽到當前屬性的變化的。但是,若對象里面本沒有這個屬性的時候,在操作時將屬性添加進去,同時包括之后對這個屬性的操作,watch是都檢測不到的。
這是因為vue的watch會在初始化的時候通過object.defineProperty給對象的每一個屬性都添加watcher來監(jiān)聽內(nèi)部的變化。所以,后期添加上去的屬性是無法檢測到的。

解決方法:

如果想在初始化后添加一個屬性并進行監(jiān)聽操作,可以使用$set:

// this.$set(object, key, value)
// 使用this.$set就可以監(jiān)聽到
this.$set(this.obj, 'a', Math.random())

watch的handler方法的兩個參數(shù)值相同

一個數(shù)據(jù),如果值發(fā)生了變化,如果想要記錄變化前和變化后的兩個值,可以使用handler方法,第一個參數(shù)為變化后的新值,第二個為變化前的舊值。
但是如果這個值是復雜對象,如果想記錄里面的屬性的變化,使用handler,兩個參數(shù)均為變化后的新值。

解決方法:

結(jié)合計算屬性、序列化、反序列化生成新的對象,來避免此問題

 data () {
    return {
      obj: {}
    }
  },
  computed: {
    // 如果想要得到差異內(nèi)容,可以結(jié)合計算屬性、序列化、反序列化生成新的對象,來避免此問題 。
    obj2 () {
      return JSON.parse(JSON.stringify(this.obj))
    }
  },
  watch: {
    obj2: {
      handler (newVal, oldVal) {
        console.log('data變化了')
        console.log(newVal, oldVal)
      },
      deep: true
    }
  },

全部代碼

<template>
? <div>
? ? <button @click="clickFn">++++</button>
? </div>
</template>

<script>
export default {
? name: 'Mall',
? data () {
? ? return {
? ? ? // !監(jiān)聽時給每一個屬性都添加getter和setter,變化了,就觸發(fā)handler函數(shù),如果后期添加屬性,這個屬性不可以被監(jiān)聽到
? ? ? // obj: {
? ? ? // ? a: 10
? ? ? // }

? ? ? // !這種是不可以被監(jiān)聽到的
? ? ? // 因為watch是通過Object.defineProperty()給對象的每一個現(xiàn)有屬性增加監(jiān)聽器
? ? ? // 在后面直接添加a屬性,身上沒有監(jiān)聽器,所以不會被監(jiān)聽到
? ? ? obj: {}
? ? }
? },
? computed: {
? ? // 如果想要得到差異內(nèi)容,可以結(jié)合計算屬性、序列化、反序列化生成新的對象,來避免此問題 。
? ? obj2 () {
? ? ? return JSON.parse(JSON.stringify(this.obj))
? ? }
? },
? watch: {
? ? obj2: {
? ? ? handler (newVal, oldVal) {
? ? ? ? console.log('data變化了')
? ? ? ? console.log(newVal, oldVal)
? ? ? },
? ? ? deep: true
? ? }
? },
? methods: {
? ? clickFn () {
? ? ? // this.obj.a = Math.random()

? ? ? // this.$set(object, key, value)
? ? ? // 使用this.$set就可以監(jiān)聽到
? ? ? this.$set(this.obj, 'a', Math.random())
? ? }
? }
}
</script>

到此這篇關(guān)于vue中watch監(jiān)聽不到變化的解決的文章就介紹到這了,更多相關(guān)vue watch監(jiān)聽不到內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Vue中如何實現(xiàn)打字機的效果

    在Vue中如何實現(xiàn)打字機的效果

    這篇文章主要介紹了在Vue中如何實現(xiàn)打字機的效果,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • vue.js中v-on:textInput無法執(zhí)行事件問題的解決過程

    vue.js中v-on:textInput無法執(zhí)行事件問題的解決過程

    大家都知道vue.js通過v-on完成事件處理與綁定,但最近使用v-on的時候遇到了一個問題,所以下面這篇文章主要給大家介紹了關(guān)于vue.js中v-on:textInput無法執(zhí)行事件問題的解決過程,需要的朋友可以參考下。
    2017-07-07
  • Vue CLI中模式與環(huán)境變量的深入詳解

    Vue CLI中模式與環(huán)境變量的深入詳解

    模式是 Vue CLI 項目中一個重要的概念,下面這篇文章主要給大家介紹了關(guān)于Vue CLI中模式與環(huán)境變量的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • 用Vue編寫抽象組件的方法

    用Vue編寫抽象組件的方法

    這篇文章主要介紹了用Vue編寫抽象組件的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • vue-cli2打包前和打包后的css前綴不一致的問題解決

    vue-cli2打包前和打包后的css前綴不一致的問題解決

    這篇文章主要介紹了vue-cli2打包前和打包后的css前綴不一致的問題解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • vue切換頁面(路由)時如何保持滾動條回到頂部

    vue切換頁面(路由)時如何保持滾動條回到頂部

    這篇文章主要介紹了vue 切換頁面(路由)時如何保持滾動條回到頂部問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • vite2.0+vue3移動端項目實戰(zhàn)詳解

    vite2.0+vue3移動端項目實戰(zhàn)詳解

    這篇文章主要介紹了vite2.0+vue3移動端項目實戰(zhàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • vue圖片加載與顯示默認圖片實例代碼

    vue圖片加載與顯示默認圖片實例代碼

    這篇文章主要為大家詳細介紹了vue圖片加載與顯示默認圖片的實例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • VueJS 集成 Medium Editor的示例代碼 (自定義編輯器按鈕)

    VueJS 集成 Medium Editor的示例代碼 (自定義編輯器按鈕)

    本篇文章主要介紹了VueJS 集成 Medium Editor的示例代碼 (自定義編輯器按鈕),具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • Vue引入部分element.ui組件的一些小坑記錄

    Vue引入部分element.ui組件的一些小坑記錄

    這篇文章主要介紹了Vue引入部分element.ui組件的一些小坑記錄,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評論