關(guān)于vue路由監(jiān)聽(tīng)事件跳轉(zhuǎn)的問(wèn)題
vue路由監(jiān)聽(tīng)事件跳轉(zhuǎn)
1.監(jiān)聽(tīng)路由觸發(fā)事件的語(yǔ)法
?watch: { ? ? $route: function clearSelectionRow() { ? ? ? console.log("success"); ? ? ? this.$emit("setSelectionFile", []); ? ? }, ? }
代碼實(shí)現(xiàn)功能:當(dāng)本頁(yè)面路由發(fā)生變化的時(shí)候,執(zhí)行回調(diào)函數(shù)clearSelectionRow();
2.可能遇到的問(wèn)題
①$route后接函數(shù),函數(shù)可以是現(xiàn)定義的,也可以是在methods方法中已經(jīng)定義完成的;
②監(jiān)聽(tīng)watch封裝在最底層的組件的時(shí)候,注意跳轉(zhuǎn)后該組件是否摧毀重建;如果被摧毀重建,路由監(jiān)聽(tīng)觸發(fā)事件將不執(zhí)行,摧毀重建:一個(gè)組件調(diào)用兩次分別顯示,在頁(yè)面上無(wú)區(qū)別,但是是同意組件的再次渲染,定義在該組件上的路由變化將監(jiān)聽(tīng)不到。
解決方法:將路由監(jiān)聽(tīng)放在一直不變的主頁(yè)面index.vue上.
③當(dāng)需要在同一屬性下執(zhí)行多個(gè)回調(diào)函數(shù)的時(shí)候,將函數(shù)以對(duì)象的形式放在數(shù)組中
$route: [ ? ? ? function clearSelectionRow() { //回調(diào)函數(shù)1 ? ? ? ? this.$emit("setSelectionFile", []); ? ? ? }, ? ? ? {//回調(diào)函數(shù)2 ? ? ? ? handler(route) { ? ? ? ? ?? ? ? ? }, ? ? ],
vue路由監(jiān)聽(tīng)不到怎么辦
最近在使用vue項(xiàng)目的時(shí)候發(fā)現(xiàn)我們使用的watch監(jiān)聽(tīng)不到$route的變化,查了很多文檔最終終于找到解決辦法。
方法一
路由包含子路由
{ name: 'home', component: Home, path: '/home', children: [ { path: 'main', name: 'main', component: Main, }, { path: 'login', name: 'login', component: Login, }, ] }
在幾個(gè)子路由之間跳轉(zhuǎn)就能保證監(jiān)聽(tīng)到路由變化
方法二
監(jiān)聽(tīng)$route.path對(duì)象
watch: { ? ? "$route.path":{ ? ? ? handler(to, from) { ? ? ? ? console.log('to:::', to); ? ? ? ? console.log('from:::', from); ? ? ? }, ? ? ? deep: true ? ? } ? }
如果我們的路由沒(méi)有子路由,想要實(shí)現(xiàn)監(jiān)聽(tīng)可以使用$route.path進(jìn)行深度監(jiān)聽(tīng),這樣也能監(jiān)聽(tīng)到路由變化了。
方法三
使用vue自帶的路由守衛(wèi)beforeRouteEnter ,beforeRouteUpdate ,beforeRouteLeave
beforeRouteEnter (to, from, next) { ? ? next(vm => { ? ? ?? ?// 通過(guò) `vm` 訪問(wèn)組件實(shí)例 ??? ? }) ? }, ? beforeRouteUpdate (to, from, next) { ? }, ? beforeRouteLeave (to, from, next) { ? }
據(jù)說(shuō)還能通過(guò)設(shè)置keep-alive來(lái)保證路由被監(jiān)聽(tīng)到,這個(gè)我最近還沒(méi)用的,有用過(guò)的小伙伴可以分享一下。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue組件通信中非父子組件傳值知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理的是關(guān)于Vue組件通信中非父子組件傳值知識(shí)點(diǎn)總結(jié),有興趣的朋友們學(xué)習(xí)下。2019-12-12詳解vue2和vue3如何定義響應(yīng)式數(shù)據(jù)
這篇文章主要是來(lái)和大家一起討論一下vue2和vue3是如何定義響應(yīng)式數(shù)據(jù)的,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下2023-11-11vue3集成echarts數(shù)據(jù)刷新后圖表不刷新的解決方法
vue3 集成 echarts 最大的坑就是出現(xiàn)了,reactive 的數(shù)據(jù) 刷新了,但圖表缺不會(huì)刷新,所以本文就給大家詳細(xì)的介紹一下vue3集成echarts數(shù)據(jù)刷新后圖表不刷新的解決方法,需要的朋友可以參考下2023-08-08vue3?錨點(diǎn)定位的多種實(shí)現(xiàn)方式
這篇文章主要介紹了vue3?多種方法的錨點(diǎn)定位,使用?Vue?Router?導(dǎo)航守衛(wèi)可以簡(jiǎn)化導(dǎo)航邏輯、統(tǒng)一管理導(dǎo)航邏輯和進(jìn)行權(quán)限控制,但需要學(xué)習(xí)和理解相關(guān)概念,并且需要手動(dòng)編寫(xiě)和管理導(dǎo)航守衛(wèi)的邏輯,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07Vue3.x項(xiàng)目開(kāi)發(fā)的一些常用知識(shí)點(diǎn)總結(jié)
目前Vue3.0是會(huì)兼容大部分2.x的語(yǔ)法,下面這篇文章主要給大家介紹了關(guān)于Vue3.x項(xiàng)目開(kāi)發(fā)的一些常用知識(shí)點(diǎn),文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05Vue中使用JsonView來(lái)展示Json樹(shù)的實(shí)例代碼
這篇文章主要介紹了Vue之使用JsonView來(lái)展示Json樹(shù)的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11vue 父組件給子組件傳值子組件給父組件傳值的實(shí)例代碼
這篇文章主要介紹了vue 父組件給子組件傳值,子組件給父組件傳值,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04