我已經被這個問題困了幾個小時了。我正在使用 Vue3
我正在嘗試使用beforeRouterEnter警衛檢查當前登錄的用戶角色,并基于此將用戶重定向到適當的路線。
提交登錄表單(從登錄頁面)后,userRoleId它存盤在 vuex 中,我被重定向到主頁。主頁有以下腳本:
beforeRouteEnter(to, from, next) {
next((vm) => {
if (vm.$store.getters.userRoleId == USER) {
next("/us");
return;
}
if (vm.$store.getters.userRoleId == ADMIN) {
next("/ad");
return;
}
if (vm.$store.getters.userRoleId == SUPER_ADMIN) {;
next("/sa");
return;
}
next();
});
},
我不斷收到警告“從“/”到“/”時,在一個導航守衛中多次呼叫“下一個”回呼。它應該在每個導航守衛中被呼叫一次。這將在生產中失敗。
錯誤出現在:我沒有next()登錄并被移動到 else 塊(一旦到達該 行),或者當我登錄并從內部到達時,無論if陳述句是否為真next()- 導致重新-直接不作業。
uj5u.com熱心網友回復:
呼叫next內部next回呼是錯誤的。那一刻導航已經完成了,這應該是一個重定向,router.push而不是這種邏輯屬于組件mounted(next回呼在它之后運行)而不是路由器保護。
這里不應該有重定向,因為它們是不必要的。商店是全球性的,可以直接匯入而不是在 上訪問vm。
它應該是:
import store from '...';
...
beforeRouteEnter(to, from, next) {
if (store.getters.userRoleId == USER) {
next("/us");
} else if ... {
...
} else {
next();
}
},
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/328311.html
標籤:javascript Vue.js Vuex 路由器
