vue-router 解決動態(tài)addRoute 后 router.back 失效

登陸前的固定路由

let router = new Router({
  routes: fixedRouter,
  base: process.env.BASE_URL
});

登陸后的動態(tài)路由

function $addRoutes(arr) {
  router.matcher = new Router({
      routes: fixedRouter,
      base: process.env.BASE_URL
  }).matcher;
  for (let i = 0; i < arr.length; i++) {
      router.addRoute(arr[i]); //  arr登錄后傳進的有權限的路由
  }
}

在動態(tài)路由的頁面中刷新后,調用this.$router.back會失效,只有url在動,頁面未刷新。

查看vue-router.common.js, 在HashHistory.prototype.setupListeners 方法中打印發(fā)現(xiàn)使用matcher動態(tài)添加的路由沒有調用該方法
解決方法

  1. 直接在代碼 VueRouter.prototype.init 方法初始時手動調用 this. history.setupListeners()。(不推薦,重裝依賴后,需要重新添加)

  2. 在調用 $addRoutes 動態(tài)添加方法時,調用一下 router.history.setupListeners()

    function $addRoutes(arr) {
     router.matcher = new Router({
       routes: fixedRouter,
       base: process.env.BASE_URL
     }).matcher;
     for (let i = 0; i < arr.length; i++) {
         router.addRoute(arr[i]); // arr 登錄后傳進的有權限的路由
     }
     router.history.setupListeners();
     }
    

調用后router.back開始生效。
使用的vue-router是3.5.1 hash模式

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容