解決vue watch數(shù)據(jù)的方法被調(diào)用了兩次的問(wè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ì)保留修改之前值的副本。
以上這篇解決vue watch數(shù)據(jù)的方法被調(diào)用了兩次的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue 框架之動(dòng)態(tài)綁定 css 樣式實(shí)例分析
這篇文章主要介紹了Vue 框架之動(dòng)態(tài)綁定 css 樣式的方法,本文通過(guò)分享小實(shí)例給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11
Vue手機(jī)號(hào)正則匹配姓名加密展示功能的實(shí)現(xiàn)
這篇文章主要介紹了Vue手機(jī)號(hào)正則匹配,姓名加密展示,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
詳解如何在Vue3使用<script lang=“ts“ setup>語(yǔ)法糖
本文主要介紹了在Vue3使用<script lang=“ts“ setup>語(yǔ)法糖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
使用vue根據(jù)狀態(tài)添加列表數(shù)據(jù)和刪除列表數(shù)據(jù)的實(shí)例
今天小編就為大家分享一篇使用vue根據(jù)狀態(tài)添加列表數(shù)據(jù)和刪除列表數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09
vue封裝自定義指令之動(dòng)態(tài)顯示title操作(溢出顯示,不溢出不顯示)
這篇文章主要介紹了vue封裝自定義指令之動(dòng)態(tài)顯示title操作(溢出顯示,不溢出不顯示),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
vue+element項(xiàng)目實(shí)時(shí)監(jiān)聽(tīng)div寬度的變化
這篇文章主要介紹了vue+element項(xiàng)目里實(shí)時(shí)監(jiān)聽(tīng)某個(gè)div寬度的變化,然后執(zhí)行相應(yīng)的事件,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-08-08

