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

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

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

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

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

解決方法:

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

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

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

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

解決方法:

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

 data () {
    return {
      obj: {}
    }
  },
  computed: {
    // 如果想要得到差異內(nèi)容,可以結(jié)合計(jì)算屬性、序列化、反序列化生成新的對(duì)象,來(lái)避免此問題 。
    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)聽時(shí)給每一個(gè)屬性都添加getter和setter,變化了,就觸發(fā)handler函數(shù),如果后期添加屬性,這個(gè)屬性不可以被監(jiān)聽到
? ? ? // obj: {
? ? ? // ? a: 10
? ? ? // }

? ? ? // !這種是不可以被監(jiān)聽到的
? ? ? // 因?yàn)閣atch是通過Object.defineProperty()給對(duì)象的每一個(gè)現(xiàn)有屬性增加監(jiān)聽器
? ? ? // 在后面直接添加a屬性,身上沒有監(jiān)聽器,所以不會(huì)被監(jiān)聽到
? ? ? obj: {}
? ? }
? },
? computed: {
? ? // 如果想要得到差異內(nèi)容,可以結(jié)合計(jì)算屬性、序列化、反序列化生成新的對(duì)象,來(lái)避免此問題 。
? ? 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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue3使用Echarts導(dǎo)致tooltip失效問題及解決方法

    Vue3使用Echarts導(dǎo)致tooltip失效問題及解決方法

    Vue3 使用 proxy 對(duì)象代理,而 echarts 則使用了大量的全等(===), 對(duì)比失敗從而導(dǎo)致了bug,這篇文章主要介紹了Vue3使用Echarts導(dǎo)致tooltip失效問題及解決方法,需要的朋友可以參考下
    2023-08-08
  • Vue3.0 手寫放大鏡效果

    Vue3.0 手寫放大鏡效果

    放大鏡在很多購(gòu)物網(wǎng)站都可以看的到,本文主要實(shí)現(xiàn) 固定放大兩倍,鼠標(biāo)進(jìn)入到左側(cè)圖片區(qū)域的時(shí)候,遮罩層顯示,離開時(shí),遮罩層隱藏,感興趣的可以了解一下
    2021-07-07
  • Vue組件的渲染流程詳細(xì)講解

    Vue組件的渲染流程詳細(xì)講解

    在Vue核心中除了響應(yīng)式原理外,視圖渲染也是重中之重,下面這篇文章主要給大家介紹了關(guān)于Vue組件的渲染流程,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • 詳解vue父子模版嵌套案例

    詳解vue父子模版嵌套案例

    本篇文章主要介紹了詳解vue父子模版嵌套案例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-03-03
  • Vue2 的12種組件通訊

    Vue2 的12種組件通訊

    之前文章我們描述給過Vue3 的七通信使用,今天中五篇文章我們?cè)賮?lái)看看Vue2 的通信使用寫法的相關(guān)資料,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • vue項(xiàng)目中v-model父子組件通信的實(shí)現(xiàn)詳解

    vue項(xiàng)目中v-model父子組件通信的實(shí)現(xiàn)詳解

    vue.js,是一個(gè)構(gòu)建數(shù)據(jù)驅(qū)動(dòng)的 web 界面的庫(kù)。Vue.js 的目標(biāo)是通過盡可能簡(jiǎn)單的 API 實(shí)現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件。下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中v-model父子組件通信實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下。
    2017-12-12
  • vue組件之間通信方式實(shí)例總結(jié)【8種方式】

    vue組件之間通信方式實(shí)例總結(jié)【8種方式】

    這篇文章主要介紹了vue組件之間通信方式,結(jié)合實(shí)例形式總結(jié)分析了vue.js的8種組件通信方式與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-02-02
  • Vue2 模板template的四種寫法總結(jié)

    Vue2 模板template的四種寫法總結(jié)

    下面小編就為大家分享一篇Vue2 模板template的四種寫法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-02-02
  • Vue3使用el-form嵌套el-table進(jìn)行單條數(shù)據(jù)的表單校驗(yàn)功能

    Vue3使用el-form嵌套el-table進(jìn)行單條數(shù)據(jù)的表單校驗(yàn)功能

    在實(shí)際開發(fā)過程中,我們經(jīng)常需要處理表格中的表單數(shù)據(jù),比如在編輯表格中的某一行數(shù)據(jù)時(shí)進(jìn)行校驗(yàn),本文給大家介紹了Vue3使用el-form嵌套el-table進(jìn)行單條數(shù)據(jù)的表單校驗(yàn)功能,文中有相關(guān)的代碼供大家參考,需要的朋友可以參考下
    2024-08-08
  • vue3組合式api創(chuàng)建單文件組件的寫法

    vue3組合式api創(chuàng)建單文件組件的寫法

    Vue3?中的?Composition?API?是一種新的編寫組件邏輯的方式,它提供了更好的代碼組織、類型推導(dǎo)、測(cè)試支持和復(fù)用性,本文為大家介紹了vue3利用組合式api創(chuàng)建單文件組件的方法,感興趣的可以了解下
    2023-08-08

最新評(píng)論