官方文档->
Vue Router官方文档
npm install vue-router@4 或 yarn add vue-router@4
版本4适用于Vue3,Vue2请使用版本3

import { createRouter, createWebHistory } from "vue-router";
const routes = [
{
path: "/",
component: ()=> import('@/views/index.vue'),
name: 'index',
meta: { title: '首页', icon: '', keepAlive: true }
}
]
const router = createRouter({
history: createWebHistory(),
routes,
})
export default router;
import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index.js'
const app = createApp(App)
app.use(router)
app.mount('#app')
<template>
<router-view v-if="!$route.meta.keepAlive" />
<router-view v-slot="{ Component }" v-if="$route.meta.keepAlive">
<keep-alive>
<component :is="Component">component>
keep-alive>
router-view>
template>
<script setup>
script>
(作为了解,新建Vue3项目时已配有)
@在代码编写编写中代替 /src

<template>
<h1>我是首页h1>
<p>{{ route.query }}p>
template>
<script setup>
import { useRouter, useRoute } from 'vue-router'
const router = useRouter();
const route = useRoute();
script>
(选项式API用this.$route.query)

@/router/index.js:
import { createRouter, createWebHistory } from "vue-router";
const routes = [
{
path: "/",
component: ()=> import('@/views/index.vue'),
name: 'index',
meta: { title: '首页', icon: '', keepAlive: true }
},
{
path: "/user/:id/username/:username",
component: ()=> import('@/views/user.vue'),
name: 'user',
meta: { title: '个人主页', icon: '', keepAlive: true }
}
]
const router = createRouter({
history: createWebHistory(),
routes,
})
export default router;
(:[parma参数名]?表示该参数可不填)
<template>
<h1>我是个人主页h1>
<p>{{ route.params }}p>
template>
<script setup>
import { useRouter, useRoute } from 'vue-router'
const router = useRouter();
const route = useRoute();
script>
(选项式API用this.$route.params )

alias
import { createRouter, createWebHistory } from "vue-router";
const routes = [
{
path: "/",
// alias: "/home", // 单个
alias: ["/home", "/index"], // 多个
component: ()=> import('@/views/index.vue'),
name: 'index',
meta: { title: '首页', icon: '', keepAlive: true }
},
{
path: "/user/:id?/username/:username",
component: ()=> import('@/views/user.vue'),
name: 'user',
meta: { title: '个人主页', icon: '', keepAlive: true }
}
]
const router = createRouter({
history: createWebHistory(),
routes,
})
路径/ 和 /home、/index 是同一页面
<router-link to="/home?title=标题&id=1006">查询字符串传参router-link>
<router-link :to="{path: '/home', query: { title : '标题', id: 1006 }}">查询字符串传参 - 动态属性绑定router-link>
<router-link to="/user/1006/username/hsy">路径传参router-link>
<router-link :to="{name: 'user', params: { id : 1006, username: 'hsy' }}">路径传参 - 动态属性绑定router-link>
<template>
<button @click="goto(1)">跳转首页button>
<button @click="goto(2)">跳转个人主页button>
template>
<script setup>
import { useRouter, useRoute } from 'vue-router'
const router = useRouter();
const route = useRoute();
function goto(type = 1) {
if(type === 1) {
// router.push('/home?title=标题&id=1006')
router.push({path: '/home', query: { title : '标题', id: 1006 }});
} else {
// router.push('/user/1006/username/hsy')
router.push({name: 'user', params: { id : 1006, username: 'hsy' }});
}
}
script>
import { createRouter, createWebHistory } from "vue-router";
const routes = [
{
path: "/",
// alias: "/home", // 单个
alias: ["/home", "/index"], // 多个
component: ()=> import('@/views/index.vue'),
name: 'index',
meta: { title: '首页', icon: '', keepAlive: true }
},
{
path: "/user/:id?/username/:username",
component: ()=> import('@/views/user.vue'),
name: 'user',
meta: { title: '个人主页', icon: '', keepAlive: true }
},
{
path: "/vip",
component: ()=> import('@/views/vip/index.vue'),
name: 'vip',
meta: { title: '会员页', icon: '', keepAlive: true },
children: [
{
path: 'info',
component: ()=> import('@/views/vip/info.vue'),
}
]
}
]
const router = createRouter({
history: createWebHistory(),
routes,
})
export default router;
<template>
<h1>会员页h1>
-----------------------------
<router-view>router-view>
-----------------------------
template>
import { createRouter, createWebHistory } from "vue-router";
const routes = [
{
path: "/",
// alias: "/home", // 单个
alias: ["/home", "/index"], // 多个
component: ()=> import('@/views/index.vue'),
name: 'index',
meta: { title: '首页', icon: '', keepAlive: true }
},
{
path: "/user/:id?/username/:username",
component: ()=> import('@/views/user.vue'),
name: 'user',
meta: { title: '个人主页', icon: '', keepAlive: true }
},
{
path: "/vip",
component: ()=> import('@/views/vip/index.vue'),
name: 'vip',
meta: { title: '会员页', icon: '', keepAlive: true },
children: [
{
path: 'info',
component: ()=> import('@/views/vip/info.vue'),
}
]
},
{
path: '/myhome',
// redirect : '/',
// redirect : '/?title=标题&id=1006',
// redirect : {
// path: '/',
// query: {
// title: '标题',
// id: 1006,
// }
// },
// redirect : '/user/1006/username/hsy',
redirect : {
name: 'user',
params: {
username: 'hsy',
id: 1006,
}
},
}
]
const router = createRouter({
history: createWebHistory(),
routes,
})
export default router;
main.js:
import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index.js'
const app = createApp(App)
app.use(router)
// 路由前置守卫
router.beforeEach((to, from, next) => {
console.log('即将进入的路由的信息to:',to);
console.log('当前即将离开的路由的信息from:',from);
if(to.name === "user") {
// next(false); // 拦截不跳转
next({path: '/home'}); // 拦截跳转到首页
} else {
next(); // 不拦截
}
})
app.mount('#app')