beforeRouteLeave指定返回鍵的路由
阿新 • • 發佈:2018-12-11
1、問題
有3個頁面:A、B、C
大致跳轉順序是這樣:
1、2、3、4是正常的按鈕進行的路由跳轉,紫色的線表示瀏覽器或者手機的返回鍵。現在我要實現的是在B按返回鍵會返回A,而實際上卻返回了C。
到B頁面的整個過程在路由棧中大致是這樣的:
A---B---C---B
,此時按返回鍵鐵定是返回C了,那麼這種情況有兩種解決辦法:
2、第一種
在頁面C中跳轉時,就直接返回,而不是push一個路由。
this.$router.back(-1);
那此時的路由棧就只有:A---B
。
此時在B中點選返回,也就直接回退到A了。
3、第二種
在C頁面依舊push:
this.$router.push({path:'/B'});
而在B頁面加入:beforeRouteLeave,或者直接在router/index.js中B頁面的路由配置內加上也行。
例外一個beforeRouteEnter用法也差不多,只是作用在進入該頁面時,比created執行要早。
每個守衛方法接收三個引數:
to: Route: 即將要進入的目標 路由物件
from: Route: 當前導航正要離開的路由
next: Function: 一定要呼叫該方法來 resolve 這個鉤子。
let fromURL = ""; export default { fromURL,//定義一個全域性變數,儲存上一個URL data(){……}, beforeRouteEnter (to, from, next) { //進入該頁面時,記錄上一個URL fromURL = from.name; console.log(from.name); //C next(); }, beforeRouteLeave(to, from, next) { console.log('此時的路由棧:' + history.length); if (fromURL == 'C' && to.name == 'C') { next('A'); //當按返回鍵是C--B--C 情形時,直接跳轉至A } else { next(); //預設跳轉 } }, methods:{……}, }
如果不考慮之前的URL,直接beforeRouteLeave(to, from, next) { to.name == 'C' ... }
,這樣會導致B–C普通跳轉也失敗。