小满Router(第十二章-动态路由)

简介: 动态路由主要通过两个函数实现。router.addRoute() 和 router.removeRoute()。它们只注册一个新的路由,也就是说,如果新增加的路由与当前位置相匹配,就需要你用 router.push() 或 router.replace() 来手动导航,才能显示该新路由

动态路由


我们一般使用动态路由都是后台会返回一个路由表前端通过调接口拿到后处理(后端处理路由)


主要使用的方法就是router.addRoute


添加路由


动态路由主要通过两个函数实现。router.addRoute() 和 router.removeRoute()。它们只注册一个新的路由,也就是说,如果新增加的路由与当前位置相匹配,就需要你用 router.push() 或 router.replace() 来手动导航,才能显示该新路由


router.addRoute({ path: '/about', component: About })


删除路由


有几个不同的方法来删除现有的路由:


  • 通过添加一个名称冲突的路由。如果添加与现有途径名称相同的途径,会先删除路由,再添加路由:


router.addRoute({ path: '/about', name: 'about', component: About })
// 这将会删除之前已经添加的路由,因为他们具有相同的名字且名字必须是唯一的
router.addRoute({ path: '/other', name: 'about', component: Other })


  • 通过调用 router.addRoute() 返回的回调:


const removeRoute = router.addRoute(routeRecord)
removeRoute() // 删除路由如果存在的话


当路由没有名称时,这很有用。


  • 通过使用 router.removeRoute() 按名称删除路由:


router.addRoute({ path: '/about', name: 'about', component: About })
// 删除路由
router.removeRoute('about')


需要注意的是,如果你想使用这个功能,但又想避免名字的冲突,可以在路由中使用 Symbol 作为名字。


当路由被删除时,所有的别名和子路由也会被同时删除


查看现有路由


Vue Router 提供了两个功能来查看现有的路由:


  • router.hasRoute():检查路由是否存在。
  • router.getRoutes():获取一个包含所有路由记录的数组。


案例


前端代码


注意一个事项vite在使用动态路由的时候无法使用别名@ 必须使用相对路径

98a6a4b75ce74b2399e46f11cfb8580d.png


const initRouter = async () => {
    const result = await axios.get('http://localhost:9999/login', { params: formInline });
    result.data.route.forEach((v: any) => {
        router.addRoute({
            path: v.path,
            name: v.name,
                                    //这儿不能使用@
            component: () => import(`../views/${v.component}`)
        })
        router.push('/index')
    })
    console.log(router.getRoutes());
}


后端代码 nodejs express


import express, { Express, Request, Response } from 'express'
const app: Express = express()
app.get('/login', (req: Request, res: Response) => {
    res.header("Access-Control-Allow-Origin", "*");
    if (req.query.user == 'admin' && req.query.password == '123456') {
        res.json({
            route: [
                {
                    path: "/demo1",
                    name: "Demo1",
                    component: 'demo1.vue'
                },
                {
                    path: "/demo2",
                    name: "Demo2",
                    component: 'demo2.vue'
                },
                {
                    path: "/demo3",
                    name: "Demo3",
                    component: 'demo3.vue'
                }
            ]
        })
    }else{
        res.json({
            code:400,
            mesage:"账号密码错误"
        })
    }
})
app.listen(9999, () => {
    console.log('http://localhost:9999');
})


目录
相关文章
|
19天前
|
JavaScript 测试技术 数据处理
解释 Vue 中的路由和路由守卫。
解释 Vue 中的路由和路由守卫。
21 2
|
19天前
|
负载均衡 JavaScript 网络协议
route和router的区别,怎么定义vue-router的动态路由?怎么获取传过来的值
route和router的区别,怎么定义vue-router的动态路由?怎么获取传过来的值
66 1
|
19天前
|
JavaScript 前端开发 网络架构
Vue3中的路由功能:安装和配置Vue Router、路由的基本用法、动态路由、嵌套路由
Vue3中的路由功能:安装和配置Vue Router、路由的基本用法、动态路由、嵌套路由
142 0
|
12月前
|
前端开发 Go
React 路由的使用以及bug规避:路由跳转、路由传参、嵌套路由
React 路由的使用以及bug规避:路由跳转、路由传参、嵌套路由
158 0
|
12月前
|
缓存 JavaScript
Vue —— 进阶 vue-router 路由(二)(replace属性、编程式路由导航、缓存路由组件、路由的专属钩子)
Vue —— 进阶 vue-router 路由(二)(replace属性、编程式路由导航、缓存路由组件、路由的专属钩子)
210 0
|
JavaScript
【多级路由使用】Vue中路由嵌套
在之前的一级路由中,我们解决了原生中的抖动问题,以及代码冗余问题,但是现在还有一个问题没有解决,那就是如果有多个需要跳转的那该怎么办呢?
89 0
小满Router(第五章-嵌套路由)
如你所见,children 配置只是另一个路由数组,就像 routes 本身一样。因此,你可以根据自己的需要,不断地嵌套视图
61 0
|
JavaScript 网络架构
小满Router(第四章-路由传参)
编程式导航 使用router push 或者 replace 的时候 改为对象形式并且只能使用name,path无效,然后传入params
121 0
小满Router(第二章-命名路由-编程式导航)
除了使用 <router-link> 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现。
32 0
|
缓存
小满Router(第九章-路由元信息)
通过路由记录的 meta 属性可以定义路由的元信息。使用路由元信息可以在路由中附加自定义的数据,
35 0