npm i vue-router -S
//引入
import router from './router'
//使用 - 链式
app.use(router).mount('#app')
| 属性 | 说明 |
|---|---|
| history | createWebHistory:大多 WEB 应用使用的模式,SEO 优化好;需要正确配置服务器
createWebHashHistory:基于 hash;SEO 优化体现一般;无须额外配置服务器 |
| routes | 路由列表;详细配置属性使用见下表 |
| linkActiveClass?
linkExactActiveClass? |
路由匹配样式
严格路由匹配样式 |
http://localhost:5173/
import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
//
})
http://localhost:5173/#/
import { createRouter, createWebHashHistory } from 'vue-router'
const router = createRouter({
history: createWebHashHistory(import.meta.env.BASE_URL),
//
})
| 属性 | 说明 |
|---|---|
| path | 路由;必填 |
| component | 对应路由的组件;必填 |
| name | 命名路由:通过名字来指定路由;不能重复;更直观、灵活,简化路由使用,如动态路由 |
| redirect | 重定向路由:让指定的路由重新定位到另外一个路由 |
| children | 嵌套路由、子路由;嵌套路由通常需要使用重定向 |
| props | 是否启用路由参数;可以接收动态路由参数和查询路由参数 |
| meta | 路由元信息:用于路由组件的额外配置;无法在编程式路由中定义或覆盖 |
| beforeEnter | 路由独享的守卫 |
{
path: '/menu',
component: () => import('@/views/MenuView.vue'),
}
https://localhost:5173/menu?user=glpla.github.io
{
path: '/details/:id',
component: () => import('@/views/DetailsView.vue'),
}
https://localhost:5173/details?id=1001
{
path: '/:pathMatch(.*)*',
name: 'NotFound',
component: () => import('../views/NotFound.vue')
}
import {h} from 'vue'
{
path: '/goods:pathMatch(.*)*',
name: 'goods-not-found',
component: h('p', {style: 'color: red'}, 'goods 404 Not Found')
}
import TeamView from "@/views/AboutView.vue";
{
path: '/about',
component: TeamView,
}
{
path: '/about',
component: () => import("@/views/AboutView.vue")
}
{
path: '/center/login',
component: () => import("@/views/LoginView.vue")
name: 'login'
}
{
path: '/',
// redirect: '/home',
redirect: { name: 'home' },
},
{
path: '/home',
name: 'home'
component: () => import("@/views/HomeView.vue")
}
{
path: "/menu",
component: () => import("@/views/MenuView.vue"),
name: "menu",
children: [
{
path: "goods", // 省略父级路由
component: () => import("@/components/Goods.vue"),
name: "goods"
},
{
path: "vip", // 省略父级路由
component: () => import("@/components/Vip.vue"),
name: "vip"
},
{
path: "/menu/rank", // 可以使用完整路由;建议所有子路由配置保持一致
component: () => import("@/components/Rank.vue"),
name: "rank"
},
{
path: "/menu/favorite",
component: () => import("@/components/Favorite.vue"),
name: "favorite"
}
]
}
{
path: "/menu",
component: () => import("@/views/MenuView.vue"),
name: "menu",
children: [
{
path: "", //空路由
component: () => import("@/components/Goods.vue"),
name: "goods"
},
// ...
]
}
{
path: '/menu',
redirect: { name: "goods" }, // 使用命名路由
// redirect: '/menu/goods', // 或使用完整路由
component: () => import('@/views/MenuView.vue'),
name: "menu",
children:[
{
path: 'goods',
component: () => import('@/components/Goods.vue'),
name: "goods"
},
// ...
]
}
{
path: "/mall",
name: "mall",
component: () => import("@/views/MallView.vue"),
meta: { showNav: true, title: "瑞幸电商" },
},
. path
. component
. name
. redirect
. children
. meta
export const routes = [
{
path: "/",
name: "home",
component: () => import("@/views/HomeView.vue"),
},
// ...
];
import { routes } from "../assets/routes";
export default [
{
path: "/",
name: "home",
component: () => import("@/views/HomeView.vue"),
},
// ...
];
import routes from "../assets/routes";