路由的主要知识点
- 在vue中配置路由
import { createRouter, createWebHistory } from "vue-router";
import Login from '../views/MyLogin.vue'
const routes = [
{ path: '/', redirect: '/login' },
{ path: '/login', component: Login, name: 'login' },
]
const router = createRouter({
history: createWebHistory(),
routes,
});
export default router;
import router from "./router"
createApp(App).use(router).mount('#app')
- 使用嵌套路由
<template>
<div class="layout-aside-container">
<!-- 左侧边栏列表 -->
<ul class="user-select-none menu">
<li class="menu-item">
<router-link to="/home/users">用户管理</router-link>
</li>
<li class="menu-item">
<router-link to="/home/rights">权限管理</router-link>
</li>
<li class="menu-item">
<router-link to="/home/goods">商品管理</router-link>
</li>
<li class="menu-item">
<router-link to="/home/orders">订单管理</router-link>
</li>
<li class="menu-item">
<router-link to="/home/settings">系统设置</router-link>
</li>
</ul>
</div>
</template>
{
path: '/home',
redirect:"/home/users",
component: Home,
name: 'home',
children: [
{ path: 'users', component: Users },
{ path: 'rights', component: Rights },
{ path: 'goods', component: Goods },
{ path: 'orders', component: Orders },
{ path: 'settings', component: Settings },
{ path: 'users/:id', component: UserDetail,name:'UserDetail'},
],
},
<template>
<div class="home-container">
<!-- 头部组件 -->
<my-header></my-header>
<!-- 主体区域 -->
<div class="home-main-box">
<!-- 左侧边栏区域 -->
<my-aside></my-aside>
<!-- 右侧内容主体区域 -->
<div class="home-main-body">
<!-- 为什么要路由占位符?因为头部区域和侧边栏中有路由跳转 -->
<router-view></router-view>
</div>
</div>
</div>
</template>
<script setup>
import MyHeader from '../components/MyHeader.vue'
import MyAside from '../components/MyAside.vue'
</script>
- 实现动态路由匹配
<router-link :to="'/home/users/' + item.id">详情</router-link>
<router-link :to="{name:'UserDetail',params:{id:item.id}}">详情</router-link>
const route=useRoute();
route.params.id
const props = defineProps({
id: String,
});
props.id
- 使用编程式导航
router.push、router.go(-1)
router.push();
const gotoMovie = (id) => {
router.push({ name: 'Movie', params: { id: id} })
}
- 使用全局导航守卫
router.beforeEach((to, from, next) => {
if (to.path === '/login') return next()
const tokenStr = localStorage.getItem('token')
if (!tokenStr) {
next('/login')
}
else {
next()
}
})