溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

vue項(xiàng)目中watch數(shù)據(jù)出現(xiàn)被調(diào)用兩次怎么解決

發(fā)布時(shí)間:2020-11-09 15:17:35 來(lái)源:億速云 閱讀:3157 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

vue項(xiàng)目中watch數(shù)據(jù)出現(xiàn)被調(diào)用兩次怎么解決?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

背景:

路由結(jié)構(gòu)/video/1.mp4,即/video是父路由,/1.mp4是/video的動(dòng)態(tài)子路由,在/video父路由中會(huì)通過(guò)url的params獲取視頻信息,即通過(guò)/1.mp4獲取對(duì)應(yīng)的視頻完整信息,然后通過(guò)props傳到動(dòng)態(tài)子路由中,然后子路由通過(guò)接受到的視頻對(duì)象,進(jìn)行展示

問(wèn)題:

當(dāng)路由切換時(shí),即當(dāng)我點(diǎn)擊其他視頻時(shí),導(dǎo)致動(dòng)態(tài)子路由變化時(shí),我監(jiān)聽(tīng)了/video父路由的變化并重新根據(jù)url的params獲取視頻對(duì)象,并自動(dòng)通過(guò)props傳入子路由中,我在子路由中通過(guò)watch 視頻對(duì)象來(lái)進(jìn)行一些操作,結(jié)果

watch: { 
 video () {
 console.log("test")
 }
}

test被打印了兩次,通過(guò)一番查找,才發(fā)現(xiàn),當(dāng)子路由切換時(shí),父路由/video中的data數(shù)據(jù)都會(huì)被初始化為默認(rèn)值,所以導(dǎo)致video對(duì)象變化了兩次,一次是因?yàn)槌跏蓟恢刂脼槟J(rèn)值空對(duì)象,一次是請(qǐng)求后的正確數(shù)據(jù)

結(jié)局:

將video對(duì)象存到vuex中,然后父路由將vuex中的video對(duì)象傳給子路由就行了

補(bǔ)充知識(shí):vue watch一個(gè)對(duì)象或數(shù)組時(shí),newvalue和oldvalue一樣

在官方的代碼改寫(xiě)了一下,當(dāng)深度watch一個(gè)對(duì)象時(shí),newval和oldval的值為什么是相等的呢?

var vm = new Vue({
 data: {
 a: 1,
  c:{
   c1:1,
   c2:2
  }
 },
 watch: {
 'a': function (val, oldVal) {
  console.log(val, oldVal,(val== oldVal))
 },
 // 方法名
 'b': 'someMethod',
 // 深度 watcher
 'c': {
  handler: function (val, oldVal) { 
   console.log(val, oldVal,(val== oldVal))
   },
  deep: true
 }
 }
})
  
vm.a = 2 
vm.c.c1 = 2 

和深度無(wú)關(guān),而是在修改(不是替換)對(duì)象或數(shù)組時(shí),舊值將與新值相同,因?yàn)樗鼈兯饕粋€(gè)對(duì)象/數(shù)組。Vue 不會(huì)保留修改之前值的副本。

關(guān)于vue項(xiàng)目中watch數(shù)據(jù)出現(xiàn)被調(diào)用兩次怎么解決問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI