若依Vue前端路由配置觸發(fā)的禁忌

前述. 問題找了幾個小時,主要之前改過路由的js,開始以為是改動導致,后面發(fā)現(xiàn)重新下(前后端代碼)也還有問題,最后新建數(shù)據(jù)庫(沒問題),兜兜轉轉發(fā)現(xiàn)是配置的菜單問題
  前不久想學習下vue2,然后拉了下開源整好的前后端(開源一條龍)項目
  1.vue-element-admin(太久不更新,只有vue2)
  2.eladmin-web (個人覺得也很好,ruoyi的借鑒版,只有vue2)
  3.RuoYi-Vue (vue3&vue2都有)

選擇 RuoYi-Vue 是github上start數(shù)多,簡單,后臺java也有接口,目前兩個版本都會體驗下,vue3版和vue2版對比差異

RuoYi-Vue RuoYi-Vue3
代碼生成預覽有高亮插件 未集成插件(自己集成)
按鈕正常 按鈕失焦不變回色(element-plus的bug)

大致講下ruoyi的路由配置,靜態(tài)路由部分和動態(tài)路由+服務端返的路由 3部分組成了一個用戶的完整路由
啥意思:
靜態(tài)路由: 登錄, 首頁,重定向, 退出,401 (說白了和用戶沒關系)
動態(tài)路由( \color{red}{禁忌之地}): 比如 分配角色,分配用戶, \color{red}{字典數(shù)據(jù)},修改生成配置
服務端返回 : 自己新增+系統(tǒng)初始化好的一些功能(上面2個都是js代碼寫死的)
都在router/index.js 定義

1.常量路由
export const constantRoutes = [
 {
    path: '/login',
    component: () => import('@/views/login'),
    hidden: true
  },
  {
    path: '/register',
    component: () => import('@/views/register'),
    hidden: true
  } .....
]
2. 動態(tài)路由
// 動態(tài)路由,基于用戶權限動態(tài)去加載
export const dynamicRoutes = [
...
  {
    path: '/system/dict-data',
    component: Layout,
    hidden: true,
    permissions: ['system:dict:list'],
    children: [
      {
        path: 'index/:dictId(\\d+)',
        component: () => import('@/views/system/dict/data'),
        name: 'Data',
        meta: { title: '字典數(shù)據(jù)', activeMenu: '/system/dict' }
      }
    ]
  }
...
]

禁忌的原因產(chǎn)生: 前端組件名和后臺返回組件名沖突,導致靜態(tài)路由失效
例如:我新增一個目錄腳數(shù)據(jù)管理

  1. 新增


    image.png

    這是新增完后


    image.png

    2.系統(tǒng)設置->字典管理 選擇一個數(shù)據(jù)字典去編輯字典
    image.png

    結果:


    image.png

觸發(fā)的禁忌原因是啥?(兩個組件名沖突觸發(fā)禁忌)
截圖都是 當前所有路由

router.afterEach(() => {
    console.info(router.getRoutes());
    NProgress.done()
})

1.新增菜單不能設置組件名(后臺是將路由地址轉駝峰返的)
這是上面的動態(tài)路由(字典數(shù)據(jù))


image.png
  1. 這是后臺返的


    image.png

仔細看,路由里面沒有信息

image.png

思考:仔細看了下ruoyi的借鑒版eladmin ,人家靜態(tài)路由比較少,其余的都是后臺加載

export const constantRouterMap = [
 { path: '/login',
   meta: { title: '登錄', noCache: true },
   component: (resolve) => require(['@/views/login'], resolve),
   hidden: true
 },
 {
   path: '/404',
   component: (resolve) => require(['@/views/features/404'], resolve),
   hidden: true
 },
 {
   path: '/401',
   component: (resolve) => require(['@/views/features/401'], resolve),
   hidden: true
 },
 {
   path: '/redirect',
   component: Layout,
   hidden: true,
   children: [
     {
       path: '/redirect/:path*',
       component: (resolve) => require(['@/views/features/redirect'], resolve)
     }
   ]
 },
 {
   path: '/',
   component: Layout,
   redirect: '/dashboard',
   children: [
     {
       path: 'dashboard',
       component: (resolve) => require(['@/views/home'], resolve),
       name: 'Dashboard',
       meta: { title: '首頁', icon: 'index', affix: true, noCache: true }
     }
   ]
 },
 {
   path: '/user',
   component: Layout,
   hidden: true,
   redirect: 'noredirect',
   children: [
     {
       path: 'center',
       component: (resolve) => require(['@/views/system/user/center'], resolve),
       name: '個人中心',
       meta: { title: '個人中心' }
     }
   ]
 }
]
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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