1. 程式人生 > >vue-router動態載入路由

vue-router動態載入路由

我們用vue開發一個帶許可權的管理系統。根據不用的使用者,顯示選單項不同

場景:前端選單不是靜態的寫在vue程式裡,而是要從後臺介面中獲取的的選單列表 來 動態載入到vue應用中

思路:1、登入成功的同時後臺會返回給我們選單列表,此時我們便在vue-router中插入這個選單所對應的路由配置

           2、配置好路由後,在新增左側選單靜態效果

           3、如果使用者沒有該選單的許可權,但是自己在網頁位址列輸入了該選單的地址。此時我們應該把頁面重定向到首頁

實現:這裡我們重點只說如何插入路由,很簡單:

1、首先插入路由   this.$router.options.routes[0].children.push() 。這裡我們可以console.log(this.$router.options)檢視一下。


this.$router.options.routes[0].children.push({// 插入路由
    name: 'map',
    path: '/map',
    component: resolve => require(['../page/map'], resolve)// 將元件用require引進來
})

2、當所有路由插入好,呼叫插入的路由。做到這裡路由就已經註冊完畢可以正常使用了

this.$router.addRoutes(this.$router.options.routes)// 呼叫addRoutes新增路由

這裡我扔一個最近專案中的例子,在二級路由中繼續新增路由。有需要的可以參考一下

      if (list.indexOf('map/getMapPage') !== -1) {
        this.$router.options.routes[1].children.push({// 插入路由
          name: 'map',
          path: '/map',
          component: resolve => require(['../page/map'], resolve)// 將元件用require引進來
        })
      }
      if (list.indexOf('getDeviceList') !== -1 || list.indexOf('getDeviceList') !== -1) {
        let routerData = {
          path: '/device',
          name: 'device',
          component: resolve => require(['../page/device/content.vue'], resolve),
          children: [
            {
              path: '/device/basiclist',
              name: 'basiclist',
              component: resolve => require(['../page/device/basiclist.vue'], resolve)
            }
          ]
        }
        if (list.indexOf('getDeviceList') !== -1) {
          routerData.children.push(
            {
              path: '/device/basiclist',
              name: 'basiclist',
              component: resolve => require(['../page/device/basiclist.vue'], resolve)
            },
            {
              path: '/device/basicNew',
              name: 'basicNew',
              component: resolve => require(['../page/device/basicNew.vue'], resolve)
            }
          )
        }
        if (list.indexOf('getGroupList') !== -1) {
          routerData.children.push(
            {
              path: '/device/grounplist',
              name: 'grounplist',
              component: resolve => require(['../page/device/grounpList.vue'], resolve)
            }
          )
        }
        this.$router.options.routes[1].children.push(routerData)
      }
      this.$router.addRoutes(this.$router.options.routes)// 呼叫addRoutes新增路由