在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ vuerouter $route watch無(wú)效了?

vuerouter $route watch無(wú)效了?

回答
編輯回答
逗婦惱

你注釋打開(kāi)的那幾個(gè)路由跟user組件也沒(méi)關(guān)系啊,雖然你名字起的是Userxxx。
全是獨(dú)立的路由,每次跳轉(zhuǎn)都被銷(xiāo)毀,watch來(lái)不及執(zhí)行。


補(bǔ)充,不是說(shuō)/user/a就一定是/user的子路由,在定義router的時(shí)候必須有明確的children關(guān)系才是。況且你的代碼里連路徑的層級(jí)關(guān)系都沒(méi)有。


再補(bǔ)充。不會(huì),你可以在router-view外加個(gè)keep-alive,然后這種情況下路由組件不會(huì)被銷(xiāo)毀,你能看到watch:"$route"是能執(zhí)行的。然后簡(jiǎn)單看了下源代碼:

Vue.prototype.$destroy = function () {
    // teardown watchers
    if (vm._watcher) {
      vm._watcher.teardown();
    }
    while (i--) {
      vm._watchers[i].teardown();
    }
}

Vue的$destory里有一步是.teardown(),此方法會(huì)將watcherthis.active = falseactive屬性置為false,當(dāng)watcher執(zhí)行時(shí)發(fā)現(xiàn)activefalse會(huì)直接跳過(guò)。
watcher的隊(duì)列里,watch對(duì)應(yīng)的watcher是在destory對(duì)應(yīng)的watcher之后的,所以destory后,當(dāng)前銷(xiāo)毀組件的所有watcher就會(huì)被全部跳過(guò)不再執(zhí)行。至于為什么是這個(gè)順序,沒(méi)看。

watch和watcher是兩個(gè)東西,watch是監(jiān)聽(tīng)api,watcher是所有相關(guān)操作的一個(gè)對(duì)象,包括watch的回調(diào),計(jì)算屬性,render等操作。

2017年7月15日 16:59