vue-router動態注冊


來源

寫路由時每新建一個路由都需要import一下或其他方式(如箭頭函數import)很是麻煩,有麻煩就有需求,於是以下這篇文章就來了

吹水

要想動態注冊路由,那么就需要制定規則,即每個路由有一定的規則,來實現動態注冊,我的路由文件是放在views下,其中每個vue文件有一個對應的包名

借助vue官網中基礎組件的自動化全局注冊

vue走你

webpake走你

代碼中不難看出歸功於webpack的require.context使我們可以獲取到文件夾下面的文件,關鍵點在(files(item).default)獲取(不知道怎么取名,望大佬分享下)
import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/home/Home.vue'
import Login from '../views/login/Login.vue'
Vue.use(VueRouter)

//獲取文件,自動掛載在router下
const files = require.context(
  // 其組件目錄的相對路徑
  '../views',
  // 是否查詢其子目錄
  true,
  // 匹配基礎組件文件名的正則表達式
  /\.vue/
)
let items = [{
  path: "",
  redirect: "/MenuSystem"
}];

files.keys().forEach(item => {
  let name = item.split('/')[2].replace('.vue', "");
  items.push({
    path: `/${name}`,
    component: files(item).default
  })
})

const routes = [
  {
    path: '/Login',
    component: Login
  },
  {
    path: '/',
    component: Home,
    children: [...items]
    // children: [{
    //   path: "",
    //   redirect: "/MenuSystem"
    // }, {
    //   path: "/MenuSystem",
    //   component: MenuSystem
    // }, {
    //   path: "/RoleSystem",
    //   component: RoleSystem
    // }, {
    //   path: "/ActionSystem",
    //   component: ActionSystem
    // }, {
    //   path: "/SystemAuthority",
    //   component: SystemAuthority
    // }, {
    //   path: "/MenuAuthority",
    //   component: MenuAuthority
    // }, {
    //   path: "/PostInfo",
    //   component: PostInfo
    // }
    // ]
  }, {
    path: "*",
    redirect: "/"
  }
]
// 解決菜單跳轉相同路徑下報錯
const originalPush = VueRouter.prototype.push;
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err);
}

const router = new VueRouter({
  mode: 'hash',
  base: process.env.BASE_URL,
  routes
})

export default router


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM