關于vue路由監(jiān)聽事件跳轉的問題
vue路由監(jiān)聽事件跳轉
1.監(jiān)聽路由觸發(fā)事件的語法
?watch: { ? ? $route: function clearSelectionRow() { ? ? ? console.log("success"); ? ? ? this.$emit("setSelectionFile", []); ? ? }, ? }
代碼實現(xiàn)功能:當本頁面路由發(fā)生變化的時候,執(zhí)行回調函數(shù)clearSelectionRow();
2.可能遇到的問題
①$route后接函數(shù),函數(shù)可以是現(xiàn)定義的,也可以是在methods方法中已經(jīng)定義完成的;
②監(jiān)聽watch封裝在最底層的組件的時候,注意跳轉后該組件是否摧毀重建;如果被摧毀重建,路由監(jiān)聽觸發(fā)事件將不執(zhí)行,摧毀重建:一個組件調用兩次分別顯示,在頁面上無區(qū)別,但是是同意組件的再次渲染,定義在該組件上的路由變化將監(jiān)聽不到。
解決方法:將路由監(jiān)聽放在一直不變的主頁面index.vue上.
③當需要在同一屬性下執(zhí)行多個回調函數(shù)的時候,將函數(shù)以對象的形式放在數(shù)組中
$route: [ ? ? ? function clearSelectionRow() { //回調函數(shù)1 ? ? ? ? this.$emit("setSelectionFile", []); ? ? ? }, ? ? ? {//回調函數(shù)2 ? ? ? ? handler(route) { ? ? ? ? ?? ? ? ? }, ? ? ],
vue路由監(jiān)聽不到怎么辦
最近在使用vue項目的時候發(fā)現(xiàn)我們使用的watch監(jiān)聽不到$route的變化,查了很多文檔最終終于找到解決辦法。
方法一
路由包含子路由
{ name: 'home', component: Home, path: '/home', children: [ { path: 'main', name: 'main', component: Main, }, { path: 'login', name: 'login', component: Login, }, ] }
在幾個子路由之間跳轉就能保證監(jiān)聽到路由變化
方法二
監(jiān)聽$route.path對象
watch: { ? ? "$route.path":{ ? ? ? handler(to, from) { ? ? ? ? console.log('to:::', to); ? ? ? ? console.log('from:::', from); ? ? ? }, ? ? ? deep: true ? ? } ? }
如果我們的路由沒有子路由,想要實現(xiàn)監(jiān)聽可以使用$route.path進行深度監(jiān)聽,這樣也能監(jiān)聽到路由變化了。
方法三
使用vue自帶的路由守衛(wèi)beforeRouteEnter ,beforeRouteUpdate ,beforeRouteLeave
beforeRouteEnter (to, from, next) { ? ? next(vm => { ? ? ?? ?// 通過 `vm` 訪問組件實例 ??? ? }) ? }, ? beforeRouteUpdate (to, from, next) { ? }, ? beforeRouteLeave (to, from, next) { ? }
據(jù)說還能通過設置keep-alive來保證路由被監(jiān)聽到,這個我最近還沒用的,有用過的小伙伴可以分享一下。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
vue3集成echarts數(shù)據(jù)刷新后圖表不刷新的解決方法
vue3 集成 echarts 最大的坑就是出現(xiàn)了,reactive 的數(shù)據(jù) 刷新了,但圖表缺不會刷新,所以本文就給大家詳細的介紹一下vue3集成echarts數(shù)據(jù)刷新后圖表不刷新的解決方法,需要的朋友可以參考下2023-08-08