問題:
控制檯報錯Duplicate named routes
,一開始登錄,切換用戶時都會出現
環境:
vue: 2.6.6 element-ui: 2.10.1 動態權限控制路由
分析:
報錯的意思是路由重複定義。查看靜態路由並沒有出現重複,打斷點發現,動態添加路由執行了多次,增加變量控制只添加一次動態路由。解決登錄報錯,沒有解決切換用戶報錯。切換用戶時router對象並沒有清空上次動態添加的路由,導致切換用戶登錄時動態添加路由報錯。切換用戶時,用戶權限會變,所有必須再次動態添加路由。問題關鍵是切換用戶時把router的動態路由清空,重現添加。
$route.matched
- 類型:
Array<RouteRecord>
一個數組,包含當前路由的所有嵌套路徑片段的路由記錄 。路由記錄就是 routes
配置數組中的對象副本 (還有在 children
數組)。
所以重新給Router.matcher賦值可以達到更新路由配置的目的
router.$addRoutes = (params) => {
router.matcher = new Router({
mode: 'history',
routes: [...StaticBaseRouter],
}).matcher;
router.addRoutes(params)
}
用$addRoutes代替原有的addRoutes,StaticBaseRouter是原有的靜態路由