随着单页应用(SPA)的普及,前端路由成为了构建现代 Web 应用不可或缺的一部分。Vue Router 是 Vue 官方推荐的路由管理器,它能够轻松实现页面之间的无刷新切换,让用户体验更流畅。
本文将带你深入了解:
和
的使用;通过这篇文章,你将掌握 Vue 路由的基本使用,为后续学习更高级功能打下坚实基础。
Vue 路由(Vue Router)是 Vue.js 官方提供的路由管理库,用于实现不同组件之间的切换与导航,支持路径匹配、参数传递、懒加载等功能。
作用 | 描述 |
---|---|
页面跳转 | 不刷新页面切换组件 |
路由映射 | 将 URL 映射到对应的组件 |
参数传递 | 支持动态路径传参(如 /user/123 ) |
嵌套结构 | 支持父子级路由嵌套 |
懒加载 | 异步加载组件,提升性能 |
以 Vue 3 为例,使用 vite
或 vue-cli
创建项目后,可以通过以下命令安装 Vue Router:
npm install vue-router@4
src/router/index.js
)import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/Home.vue'
import About from '../views/About.vue'
const routes = [
{
path: '/',
name: 'Home',
component: Home
},
{
path: '/about',
name: 'About',
component: About
}
]
const router = createRouter({
history: createWebHistory(),
routes
})
export default router
src/main.js
)import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
createApp(App).use(router).mount('#app')
进行跳转
首页
关于
是 Vue Router 提供的声明式导航组件,点击后不会刷新页面,而是切换组件内容。
展示对应组件
首页
关于
是一个占位符,根据当前路径自动渲染对应的组件。
有时我们需要根据不同的参数展示不同的内容,例如用户详情页 /user/123
。
{
path: '/user/:id',
name: 'User',
component: () => import('../views/User.vue')
}
export default {
mounted() {
console.log('用户 ID:', this.$route.params.id)
}
}
示例访问:
/user/123
→ 输出 用户 ID: 123
/user/456
→ 输出 用户 ID: 456
除了使用
,我们也可以通过 JavaScript 主动控制路由跳转。
// 跳转到指定路径
this.$router.push('/about')
// 带参数跳转
this.$router.push({ name: 'User', params: { id: 123 } })
// 替换当前路径(不产生新历史记录)
this.$router.replace('/contact')
适用于布局嵌套、多级菜单等场景。
{
path: '/dashboard',
name: 'Dashboard',
component: DashboardLayout,
children: [
{
path: 'profile',
component: Profile
},
{
path: 'settings',
component: Settings
}
]
}
DashboardLayout.vue
)
仪表盘布局
访问路径:
/dashboard/profile
→ 显示 Profile
组件/dashboard/settings
→ 显示 Settings
组件适用于需要在同一页面展示多个组件的情况,如侧边栏 + 内容区。
{
path: '/layout',
components: {
default: MainContent,
sidebar: SideBar
}
}
懒加载是优化首屏加载速度的重要手段。
{
path: '/contact',
name: 'Contact',
component: () => import('../views/Contact.vue')
}
特点:
问题 | 解决方案 |
---|---|
页面跳转后组件不更新 | 使用 key 属性强制重新渲染组件 |
获取不到 $route 或 $router |
确保组件已正确注册并处于 内 |
动态添加路由无效 | 使用 router.addRoute() 方法 |
多个 不生效 |
检查是否遗漏了 name 属性或拼写错误 |
页面空白无内容 | 检查路由路径是否正确,是否未匹配任何组件 |
功能 | 推荐方式 |
---|---|
页面跳转 |
|
组件展示 |
|
动态传参 | params |
编程式跳转 | router.push() / replace() |
嵌套结构 | children 配置 |
多视图 | 命名
|
按需加载 | () => import(...) |
推荐程度 | ✅✅ 强烈推荐掌握 |
感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!