Search K
Appearance
Appearance
📊 SEO元描述:2024年最新Vue Router路由基础教程,详解路由定义、路由跳转、路由参数。包含完整代码示例,适合Vue.js开发者快速掌握路由核心功能。
核心关键词:Vue Router路由基础2024、Vue路由定义、Vue路由跳转、Vue路由参数、router-link、router-view
长尾关键词:Vue路由怎么定义、Vue路由如何跳转、Vue路由参数传递、Vue Router基础教程、Vue路由使用方法
通过本节Vue Router路由基础详解,你将系统性掌握:
Vue Router路由基础是Vue.js应用导航的核心技术。路由基础功能包括路由定义、路由跳转、路由参数三大核心部分,也是构建单页应用的基础技能。
💡 学习建议:路由基础是Vue Router的核心,建议通过实际项目练习来掌握这些功能
路由定义是建立URL路径与组件映射关系的过程:
// 🎉 基础路由定义示例
import { createRouter, createWebHistory } from 'vue-router';
import Home from '../views/Home.vue';
import About from '../views/About.vue';
import Contact from '../views/Contact.vue';
const routes = [
// 基础路由定义
{
path: '/', // 路径
name: 'Home', // 路由名称
component: Home // 对应组件
},
{
path: '/about',
name: 'About',
component: About,
meta: { // 路由元信息
title: '关于我们',
requiresAuth: false
}
},
{
path: '/contact',
name: 'Contact',
component: Contact
},
// 重定向路由
{
path: '/home',
redirect: '/'
},
// 别名路由
{
path: '/user',
component: User,
alias: '/profile' // /profile也会匹配到User组件
},
// 404路由(通配符路由)
{
path: '/:pathMatch(.*)*',
name: 'NotFound',
component: () => import('../views/NotFound.vue')
}
];
const router = createRouter({
history: createWebHistory(),
routes
});// 动态路由参数定义
const routes = [
// 单个动态参数
{
path: '/user/:id',
name: 'User',
component: User
},
// 多个动态参数
{
path: '/user/:id/post/:postId',
name: 'UserPost',
component: UserPost
},
// 可选参数
{
path: '/user/:id?',
name: 'UserOptional',
component: User
},
// 参数正则验证
{
path: '/user/:id(\\d+)', // 只匹配数字
name: 'UserNumeric',
component: User
},
// 重复参数
{
path: '/files/:path+', // 匹配一个或多个
name: 'Files',
component: Files
}
];router-link是Vue Router提供的声明式导航组件:
<!-- 🎉 router-link声明式导航示例 -->
<template>
<div>
<!-- 基础导航 -->
<router-link to="/">首页</router-link>
<router-link to="/about">关于</router-link>
<!-- 命名路由导航 -->
<router-link :to="{ name: 'User', params: { id: 123 } }">
用户详情
</router-link>
<!-- 带查询参数的导航 -->
<router-link :to="{ path: '/search', query: { q: 'vue' } }">
搜索Vue
</router-link>
<!-- 自定义标签 -->
<router-link to="/about" tag="button">
关于按钮
</router-link>
<!-- 自定义激活类名 -->
<router-link
to="/about"
active-class="active"
exact-active-class="exact-active"
>
关于我们
</router-link>
<!-- 替换历史记录 -->
<router-link to="/about" replace>
替换导航
</router-link>
</div>
</template>
<style>
/* 路由激活状态样式 */
.router-link-active {
color: #42b983;
font-weight: bold;
}
.router-link-exact-active {
color: #ff6b6b;
text-decoration: underline;
}
.active {
background-color: #f0f0f0;
}
</style>编程式导航通过router实例的方法实现JavaScript代码控制的路由跳转:
<!-- 🎉 编程式导航示例 -->
<template>
<div>
<button @click="goHome">回到首页</button>
<button @click="goUser">用户详情</button>
<button @click="goSearch">搜索页面</button>
<button @click="goBack">返回上页</button>
<button @click="goForward">前进一页</button>
</div>
</template>
<script>
import { useRouter } from 'vue-router';
export default {
setup() {
const router = useRouter();
// 导航到首页
const goHome = () => {
router.push('/');
};
// 导航到用户详情(带参数)
const goUser = () => {
router.push({
name: 'User',
params: { id: 123 }
});
};
// 导航到搜索页面(带查询参数)
const goSearch = () => {
router.push({
path: '/search',
query: {
q: 'vue router',
category: 'tutorial'
}
});
};
// 返回上一页
const goBack = () => {
router.go(-1);
// 或者使用 router.back();
};
// 前进一页
const goForward = () => {
router.go(1);
// 或者使用 router.forward();
};
return {
goHome,
goUser,
goSearch,
goBack,
goForward
};
}
};
</script>编程式导航的核心优势:
💼 实际应用场景:表单提交成功后跳转、用户登录后重定向、权限验证后导航等
<!-- 🎉 路由参数使用示例 -->
<template>
<div>
<h1>用户详情页</h1>
<p>用户ID: {{ userId }}</p>
<p>文章ID: {{ postId }}</p>
<p>搜索关键词: {{ searchQuery }}</p>
<p>分类: {{ category }}</p>
<!-- 显示完整路由信息 -->
<pre>{{ routeInfo }}</pre>
</div>
</template>
<script>
import { computed } from 'vue';
import { useRoute } from 'vue-router';
export default {
setup() {
const route = useRoute();
// 获取路由参数
const userId = computed(() => route.params.id);
const postId = computed(() => route.params.postId);
// 获取查询参数
const searchQuery = computed(() => route.query.q);
const category = computed(() => route.query.category);
// 完整路由信息
const routeInfo = computed(() => ({
path: route.path,
name: route.name,
params: route.params,
query: route.query,
hash: route.hash,
fullPath: route.fullPath
}));
return {
userId,
postId,
searchQuery,
category,
routeInfo
};
}
};
</script>// 监听路由参数变化
import { watch } from 'vue';
import { useRoute } from 'vue-router';
export default {
setup() {
const route = useRoute();
// 监听路由参数变化
watch(
() => route.params.id,
(newId, oldId) => {
console.log(`用户ID从 ${oldId} 变为 ${newId}`);
// 重新加载用户数据
loadUserData(newId);
}
);
// 监听查询参数变化
watch(
() => route.query,
(newQuery, oldQuery) => {
console.log('查询参数变化:', newQuery);
// 重新执行搜索
performSearch(newQuery);
},
{ deep: true }
);
const loadUserData = (userId) => {
// 加载用户数据的逻辑
};
const performSearch = (query) => {
// 执行搜索的逻辑
};
}
};<!-- 🎉 router-view使用示例 -->
<template>
<div id="app">
<!-- 应用导航 -->
<nav>
<router-link to="/">首页</router-link>
<router-link to="/about">关于</router-link>
<router-link to="/contact">联系</router-link>
</nav>
<!-- 路由视图 -->
<main>
<!-- 基础路由视图 -->
<router-view />
<!-- 命名视图 -->
<router-view name="sidebar" />
<router-view name="main" />
</main>
<!-- 页脚 -->
<footer>
<p>© 2024 我的网站</p>
</footer>
</div>
</template>
<style>
nav {
background-color: #f8f9fa;
padding: 1rem;
}
nav a {
margin-right: 1rem;
text-decoration: none;
color: #007bff;
}
nav a.router-link-active {
color: #0056b3;
font-weight: bold;
}
main {
min-height: 500px;
padding: 2rem;
}
</style>通过本节Vue Router路由基础详解的学习,你已经掌握:
A: router-link是Vue Router的组件,支持SPA导航,不会刷新页面;a标签会触发页面刷新。router-link还提供了激活状态、路由对象等功能。
A: 可以通过路由参数、查询参数、或者使用状态管理工具如Pinia。对于大量数据,建议使用状态管理而不是URL参数。
A: 路由参数是URL路径的一部分(如/user/123),查询参数是URL后的查询字符串(如?id=123&name=vue)。路由参数通常用于必需参数,查询参数用于可选参数。
A: router.push()等方法返回Promise,可以使用try-catch或.catch()来处理跳转失败的情况。
A: 可以使用keep-alive组件包裹router-view,或者使用状态管理工具来保持组件状态。
"掌握Vue Router的路由基础功能是构建现代Vue.js应用的重要技能。通过熟练运用路由定义、导航和参数传递,你将能够创建出用户体验优秀的单页应用。"