美文网首页
动态路由

动态路由

作者: JLong | 来源:发表于2022-01-26 21:18 被阅读0次

思路:

    1. 首先得设定一个layout主页面,动态路由只是动态子路由的权限控制。
    2. 设立映射表,登录后,根据不同用户,后端返回对应的权限name路由表即可,然后通过映射表找出对应路由
    3. 找到对应路由,存放到vuex或者Pinia中,调用异步路由加载方法生成新的路由数组layout,通过addRoute(layout)进行挂在。

// layout.vue

<container>
    <header></header>
    <container>
        <aside></aside>
        <main>
            <el-tabs></el-tabs>
            <router-view />   // 映射路由
        </main>
    </container>
</container>
...
import {  useRouter, useRoute } from 'vue-router'
const router = useRouter()
const allRouters: any = router.options.routes[0].children // 获取所有路由

// Login

import { setAsyncRoute } from '@/route'
setAsyncRoute(store.asyncRoute)

// main.js

import { setupRouter } from './router'
const app = createApp(App)
setupRouter(app)

// router/index.ts

import {  mapRoutee } from './mapRoutes'

const common = [] // 通用路由,如首页什么的不需要权限控制的
const routes: Array<RouteRecordRaw> = [
    {
        path: '/',
        name: 'Layout',
        redirect: '/home',
        meta: {},
        children: [...common]
    },
    {} // 登录
    {} // 注册
    404、401等
    {
        path: '/:catchAll(.*)', // 捕获不存在的路由
        redirect: '404',
        meta: { hide: true }    
    }
]

// 路由守卫
function routerGuards(router: Router) {
    router.beforeEach((to, from, next) => { do some thing })
}

const router = createRouter({
    history: createWebHashHistory(),
    routes
})

// 加载动态路由
export function setAsyncRoute(testRoute:any) {
    const asyncRoute = mapRoutee(testRoute) // 获取映射路由
    const layout:RouteRecordRaw = routes.find(i => i.name === 'Layout')
    layout.children = [...common, ...asyncRoute]
    router.addRoute(layout)
}

// 挂载路由
export async fuunction setupRouter (app: App) {
    routerGuards(router)

    app.use(router)

    // 等待路由准备就绪后挂载App实例
    await router.isReady()
}

export default router

// mapRouters.ts

const rMap = [] //动态映射路由

export function mapRoute(asyncRouter: any): any {
    const arr: any[] = []
    aysncRouter.map(item => {
        rMap.map(i => {
            item.name === i.name &&arr.push
        })
    })
    return arr
}

相关文章

  • Vue 动态路由

    动态路由 动态路由传参

  • 动态路由 & 嵌套路由实例

    1.动态路由 注意:动态路由以‘:’开头。$route 参数表见 “ 动态路由 & 嵌套路由 ” 2.嵌套路由 注...

  • vue路由的介绍(二)--vue动态路由和get的传值

    vue动态路由和get的传值---->同属于路由的传参 1,vue动态路由: 动态路由的配置: ①,在配置路由时加...

  • 处理路由和权限映射element-admin

    你现在项目中如何处理路由和权限映射的? 动态路由分析动态路由流程图 动态路由源码分析生成动态路由的源码位于 src...

  • vue全家桶(2.5)

    3.8.动态路由匹配和路由组件传参 #3.8.1.动态路由匹配 动态路由意味着不固定,具有某种模式,我们希望通过某...

  • vue动态路由传值和get传值

    1、动态路由传值2、get传值 不同路由传值:动态路由 1、配置动态路由,main.js 2、在列表页NewsLi...

  • Vue常见面试题

    1.怎么定义vue-router的动态路由?怎么获取传递过来的动态参数? 何为动态路由?能够提供参数的路由即为动态...

  • vue中的路由

    vue中4中路由包含: 1、动态路由2、嵌套路由3、编程式路由4、命名式路由 1、动态路由 2、嵌套路由 3、编程...

  • this.$router.push的问题

    会匹配到‘/login’路由,但是 如果遇到动态路由会加载到动态路由后面。 所以不要忘了加'/'

  • 09、vue3动态路由搭建

    1、为什么需要动态路由? 一般开发都是写静态路由,我们为什么要使用动态路由呢?因为动态路由对权限的划分是一个最有效...

网友评论

      本文标题:动态路由

      本文链接:https://www.haomeiwen.com/subject/yvtohrtx.html