Vue-Router 第十四节:动态路由

910 阅读2分钟

Vue-Router 第十四节:动态路由

对路由的添加通常是通过 routes 选项来完成的,但是在某些情况下,我们可能想在应用程序已经运行的时候添加或删除路由。我们一般使用动态路由,都是请求后端接口给我们返回路由表再进行处理。

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

1、添加路由

router.addRoute()

  router.addRoute({path:'/user',component:import("@/views/user/index.vue")})

案例

添加路由并跳转

// router/index.tsimport path from 'path';
import { createRouter, createWebHistory, RouteRecordRaw } from "vue-router";
// 1、定义路由 每个路由都需要映射到一个组件。
const routes: Array<RouteRecordRaw> = [
    // 可直接导入或者引入
    {
        path: '/',
        component: () => import("@/views/login/index.vue"),
    },
    {
        path: '/home',
        component: () => import("@/views/home/index.vue"),
          // *****************在路由独享守卫里进行路由添加******************
        beforeEnter:(to,from,next)=>{
         router.addRoute({path:'/user', name:'user',component:import("@/views/user/index.vue")})
            next()
        }
    }
]
​
​
// 2、创建路由实例并传递routes
const router = createRouter({
    history: createWebHistory(),
    routes,
    scrollBehavior(to, from, savedPosition) {
        return { top: 1000 }
    }
})
​
// 导出
export default router
​
// home/index.vue
<template>
    <div style=" background-color: aquamarine;">
        <H1>
            我是Home页面
        </H1>
        <button @click="jump">
            跳转路由
        </button>
    </div>
</template>
​
<script setup lang="ts">
import { useRouter } from 'vue-router'
const router = useRouter()
const jump=()=>{
    // **********进行手动导航(如果新增加的路由与当前位置相匹配,就需要你用 router.push() 或 router.replace() 来手动导航 才能显示路由)
    router.push('/user')         
}
</script>
​
<style></style>

1716777726642.jpg image-20240527103902124.png

image-20240527104057647.png

2、删除路由

方法一

通过添加一个名称冲突的路由

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

方法二

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

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

方法三

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

router.addRoute({path:'/user',name:'user',component:User})
router.removeRoute('user')

案例

以方法三为案例: 路由配置文件同上。

// home/index.vue
<template>
    <div style=" background-color: aquamarine;">
        <H1>
            我是Home页面
        </H1>
        <button @click="jump">
            跳转路由
        </button>
        <button @click="del">
            删除路由
        </button>
    </div>
</template>
​
<script setup lang="ts">
import { useRouter } from 'vue-router'
const router = useRouter()
const jump=()=>{
    router.push('/user')
}
 // **********删除user路由**************
const del=()=>{
    router.removeRoute('user')   
}
</script>
​
<style></style>

1716779387734.jpg

1716779457240.jpg

3、添加嵌套路由

要将嵌套路由添加到现有的路由中,可以将路由的 name 作为第一个参数传递给 router.addRoute(),这将有效地添加路由,就像通过 children 添加的一样:

router.addRoute({ name: 'admin', path: '/admin', component: Admin })
router.addRoute('admin', { path: 'settings', component: AdminSettings })

这等效于:

router.addRoute({
  name: 'admin',
  path: '/admin',
  component: Admin,
  children: [{ path: 'settings', component: AdminSettings }],
})

4、查看现有路由

router.hasRoute():检查路由是否存在。

router.getRoutes():获取一个包含所有路由记录的数组。

案例

<template>
    <div style=" background-color: aquamarine;">
        <H1>
            我是Home页面
        </H1>
        <button @click="jump">
            跳转路由
        </button>
        <button @click="del">
            删除路由
        </button>
    </div>
</template>
​
<script setup lang="ts">
import { useRouter } from 'vue-router'
const router = useRouter()
const jump=()=>{
    if(router.hasRoute('user')){   // ************** 判断是否存在路由 user***********
        router.push('/user')
    }else{
        alert('抱歉!没有此路由')
    }
}
​
const del=()=>{
    router.removeRoute('user')
}
</script>
​
<style></style>

1716779997682.jpg

1716780072672.jpg

1716780246479.jpg