路由 Vue Router

Vue Router 是 Vue.js 官方的路由管理器,它与 Vue.js 核心深度集成,让构建单页应用变得轻而易举。通过路由,可以在不刷新页面的情况下切换不同的视图,提供流畅的用户体验。

什么是路由

在传统多页应用中,点击链接会跳转到新页面,浏览器会重新加载。而在单页应用(SPA)中,路由负责根据 URL 变化动态渲染对应的组件,无需刷新页面。

/user/profile  →  UserProfile 组件
/user/settings →  UserSettings 组件
/about         →  About 组件

为什么需要路由

单页应用体验

页面切换无刷新,用户体验流畅:

用户点击链接 → URL 变化 → 路由匹配 → 组件切换

URL 管理

每个视图都有对应的 URL,支持:

  • 浏览器前进/后退
  • 收藏书签
  • 分享链接
  • SEO 优化

组件组织

路由将应用拆分成独立的视图模块:

├── Home(首页)
├── User(用户)
│   ├── Profile(个人资料)
│   └── Settings(设置)
├── Product(产品)
│   ├── List(列表)
│   └── Detail(详情)
└── NotFound(404)

安装 Vue Router

npm 安装

npm install vue-router@3

CDN 引入

<script src="https://cdn.jsdelivr.net/npm/vue-router@3.5.3/dist/vue-router.js"></script>

基本使用

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from './views/Home.vue'
import About from './views/About.vue'

Vue.use(VueRouter)

const routes = [
  { path: '/', component: Home },
  { path: '/about', component: About }
]

const router = new VueRouter({
  mode: 'history',
  routes
})

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')
<template>
  <div>
    <nav>
      <router-link to="/">首页</router-link>
      <router-link to="/about">关于</router-link>
    </nav>
    <router-view></router-view>
  </div>
</template>

核心概念

router-link

声明式导航,渲染为 <a> 标签:

<router-link to="/">首页</router-link>
<router-link to="/about">关于</router-link>

<router-link to="/user" tag="button">用户</router-link>

<router-link to="/user" replace>用户</router-link>

<router-link :to="{ name: 'user', params: { id: 123 } }">用户详情</router-link>

router-view

路由出口,匹配的组件在这里渲染:

<router-view></router-view>

<router-view class="view"></router-view>

<transition name="fade">
  <router-view></router-view>
</transition>

路由配置

const routes = [
  {
    path: '/',
    name: 'home',
    component: Home,
    meta: { requiresAuth: false }
  },
  {
    path: '/user/:id',
    name: 'user',
    component: User,
    props: true
  },
  {
    path: '*',
    component: NotFound
  }
]

路由模式

hash 模式

使用 URL 的 hash 模拟完整 URL:

http://example.com/#/user
const router = new VueRouter({
  routes
})

history 模式

使用 HTML5 History API,URL 更美观:

http://example.com/user
const router = new VueRouter({
  mode: 'history',
  routes
})

history 模式需要服务器配置

所有路径都需要返回 index.html,否则刷新会 404。

Nginx 配置:

location / {
  try_files $uri $uri/ /index.html;
}

本章内容

  • 路由基础:路由配置和基本使用
  • 动态路由:动态路径参数和路由匹配
  • 嵌套路由:组件嵌套和子路由
  • 编程式导航:使用 JavaScript 进行导航
  • 路由守卫:导航守卫和权限控制

路由与组件的关系

URL 变化
    ↓
路由匹配
    ↓
组件渲染
    ↓
生命周期触发
    ↓
数据加载

理解这个流程,是掌握 Vue Router 的关键。

路由懒加载

按需加载组件,优化首屏性能:

const routes = [
  {
    path: '/about',
    component: () => import('./views/About.vue')
  },
  {
    path: '/user',
    component: () => import(/* webpackChunkName: "user" */ './views/User.vue')
  }
]

学习建议

学习 Vue Router 的步骤:

  1. 理解基本概念:router-link、router-view、路由配置
  2. 掌握动态路由:参数传递和获取
  3. 学习嵌套路由:组件嵌套结构
  4. 实践编程导航:JavaScript 控制跳转
  5. 应用路由守卫:权限控制和数据预取