提供一種解決方案:
組件內的守衛)beforeRouteLeave (
通過某種方式,進入頁面B ( 如詳情頁 ),返回時需跳轉到 頁面A ( 如首頁 ),在 B 頁面中添加 守衛鈎子:
beforeRouteLeave (to, from, next) {
// 通過地址查詢是否帶有跳轉標示 let backHome = this.$route.query.backhome
// 有標示 且 要跳轉的路由不等於 A 頁面時設定即將跳轉的路由;否則繼續跳轉原導航路由 if(backHome == 'backhome' && to.name !='Home'){ next('/news') }else{ next() } },
此處的 if else ,比較容易失誤,從而導致進入深循環!
續:
業務中有特殊場景,通過 觸發頁面X 進入到 B 頁面時,需打開一個新的窗口或 webview,此時新打開的窗口只有一條記錄,返回的時候會直接關閉窗口( webview中 ),這樣就得另換一種思路,走中間頁面。
X 頁面跳轉鏈接設為A頁面,並在鏈接中添加跳轉標示,到 A 頁面后判斷是否存在此標示,存在的話先替換地址,再跳轉。如果覺得在 A頁面的短暫停留礙眼,也可以用加載圖或者直接白屏掩蓋
// 檢查標示
let topage = this.$route.query.topage if(topage) {
// 替換地址,去掉標示 this.$router.replace({name:'Home'})
// 跳轉到頁面 B this.$router.push({name: 'Page', params: { id: topage }},()=>{
// 去掉加載loading this.ifRedirect = true }) }else{
// 去掉加載loading this.ifRedirect = true }