欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

Vue 3 動態路由與手動導航實現

admin
2024年12月28日 19:55 本文熱度 74

在后臺管理系統中,前端的路由往往需要根據用戶的權限動態生成。這篇文章將重點介紹如何在 Vue 3 中實現動態路由注冊和手動導航,確保用戶訪問的頁面與權限對應。

1. 動態路由的需求與原理

為什么需要動態路由?

  • 權限控制:不同用戶角色需要看到不同的菜單和頁面。
  • 后端驅動:后端返回菜單數據,前端動態渲染菜單和注冊路由。
  • 避免硬編碼:路由不再寫死在前端代碼里,保證靈活性。
動態路由的原理

  1. 靜態路由:定義公共頁面,如登錄頁和404頁面。
  2. 動態路由:存儲需要通過后端數據動態添加的頁面。
  3. 動態注冊路由:根據后端返回的數據,通過router.addRoute動態添加到路由系統。
  4. 手動導航:添加新路由后,需要手動觸發導航保證路由生效。

2.靜態路由與動態路由配置
靜態路由
靜態路由是所有用戶共享的基本路由,如登錄頁、404頁等。
    import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router';import Layout from '@/layout/admin.vue';
    const routesArray<RouteRecordRaw> = [  {    path'/',    componentLayout,    name'admin',  },  {    path'/login',    name'login',    component() => import('@/pages/login/index.vue'),    meta: { title'登錄頁' },  },  {    path'/:pathMatch(.*)*',    name'NotFound',    component() => import('@/pages/404/index.vue'),    meta: { title'404' },  },];
    動態路由
    動態路由需要根據后端返回的數據進行注冊:
      const asyncRoutes: Array<RouteRecordRaw> = [  {    path: '/',    name: '/',    component: () => import('@/pages/index/index.vue'),    meta: { title: '首頁' },  },  {    path: '/goods/list',    name: '/goods/list',    component: () => import('@/pages/goods/list.vue'),    meta: { title: '商品列表' },  },  {    path: '/category/list',    name: '/category/list',    component: () => import('@/pages/category/list.vue'),    meta: { title: '分類列表' },  },];
      3.addRoutes實現動態路由注冊
      addRoutes方法
      該方法接收后端返回的菜單數組,并將匹配的動態路由添加到主路由admin下。
        import { router } from '@/router/index';
        export const addRoutes = (routesArray: Array<MenusArray>) => {  let hasNewRoutes = false;
          const addRoutesFromMenus = (menus: Array<MenusArray>) => {    menus.forEach((menu) => {      // 查找匹配的動態路由      const route = asyncRoutes.find((r) => r.path === menu.frontpath);      // 添加到router中      if (route && !router.hasRoute(route.path)) {        router.addRoute('admin', route);        hasNewRoutes = true;      }      // 遞歸處理子菜單      if (menu.child && menu.child.length > 0) {        addRoutesFromMenus(menu.child);      }    });  };
          addRoutesFromMenus(routesArray);  return hasNewRoutes;};
        解釋

        1. router.addRoute:VueRouter提供的API,可以動態添加路由。
        2. 避免重復添加:router.hasRoute檢查路由是否已存在,防止重復注冊。
        3. 遞歸處理:支持多級菜單,遞歸遍歷child子菜單。

        4.路由守衛中調用addRoutes
        在router.beforeEach路由守衛中,調用addRoutes注冊動態路由,并實現手動導航。
          import { getToken } from '@/utils/auth';import store from '@/store';import { addRoutes } from '@/router/index';
          router.beforeEach(async (to, from, next) => {  const token = getToken();  let hasNewRoutes = false;
            // 顯示全局加載狀態  showFullLoading();
            // 未登錄跳轉到登錄頁  if (!token && to.name !== 'login' && to.name !== 'NotFound') {    return next('/login');  }
            // 已登錄訪問登錄頁,重定向到主頁  if (token && to.name === 'login') {    return next('/');  }
            // 已登錄狀態下,動態添加路由  if (token) {    await store.dispatch('user/getUserInfo'); // 拉取用戶信息    hasNewRoutes = addRoutes(store.getters['menu/getMenus']); // 添加動態路由  }
            // 設置頁面標題  if (to.meta.title) {    document.title = `${to.meta.title}-測試后臺管理`;  } else {    document.title = '測試后臺管理';  }
            // 手動導航:如果添加了新路由,重新跳轉當前頁面  hasNewRoutes ? next(to.fullPath) : next();});
          手動導航的必要性

            • router.addRoute是動態操作,添加新路由后需要重新跳轉一次,確保用戶能正常訪問新注冊的頁面。
            • next(to.fullPath):手動跳轉到當前頁面。

            5.完整流程

            1. 用戶登錄:獲取用戶 token,拉取用戶信息。
            2. 獲取菜單數據:后端返回用戶權限對應的菜單數據。
            3. 動態注冊路由:調用 addRoutes 將菜單數據匹配的路由添加到 admin 下。
            4. 手動導航:動態路由添加完成后,使用 next(to.fullPath) 手動觸發頁面跳轉。
            5. 權限生效:用戶只能訪問與自己權限匹配的頁面。

            6.總結

            • 靜態路由:用于公共頁面。
            • 動態路由:后端驅動,通過 addRoutes 動態注冊。
            • 手動導航:解決動態添加路由后無法直接訪問的問題。
            • 靈活:動態路由使前端代碼更靈活,后端控制權限更方便。


            閱讀原文:原文鏈接


            該文章在 2024/12/30 16:01:11 編輯過
            關鍵字查詢
            相關文章
            正在查詢...
            點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
            點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
            點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
            點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
            Copyright 2010-2025 ClickSun All Rights Reserved