handleRouter

import { RouteRecordNormalized } from "vue-router";

// 通过router.getRoutes()获取routes



function isChild(route:RouteRecordNormalized, pRoute:RouteRecordNormalized):boolean{

    if(pRoute.children && pRoute.children.find(child =>`${pRoute.path}/${child.path}` === route.path)){

        return true

    }

    return false

}



export function handleRoutes(routes:RouteRecordNormalized[]):RouteRecordNormalized[]{

    routes = routes.filter(route => route.meta?.showInAside)

    let map = new Map<string, boolean>() //该路由是否为顶级路由

    routes.forEach(route => {

        if(routes.find(pRoute => isChild(route, pRoute))){

            map.set(route.path, false) //该路由是某个路由的子路由

        }

        else{

            map.set(route.path, true) //该路由不是任何路由的子路由,是顶级路由

        }

    })

    return routes.filter(route => map.get(route.path)) //返回所有顶级路由

}



export function getRouteByName(name: string, routes:RouteRecordNormalized[]): RouteRecordNormalized | undefined{

    for(let route of routes){

        if(route.name == name){

            return route

        }

    }

    return undefined

}



// 获取面包屑的路由名称数组

export function getNames(name: string, routes:RouteRecordNormalized[]): string[]{

    let names: string[] = []

    while(true){

        names.push(name)

        let route = getRouteByName(name, routes) as RouteRecordNormalized

        let parentRoute = getRouteByName(route.meta?.parentRouteName as string, routes)

        if(parentRoute){

            name = parentRoute.name as string

            continue

        }

        else{

            break

        }

    }

    return names.reverse()

}



// 获取面包屑的路由描述数组

export function getDescriptions(names:string[], routes:RouteRecordNormalized[]): string[]{

    let descriptions: string[] = []

    for(let name of names){

        let route = getRouteByName(name, routes) as RouteRecordNormalized

        descriptions.push(route.meta?.description as string)

    }

    return descriptions

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值