Vue3 Router 入门指南:构建单页面待办应用

625 阅读2分钟

Vue3 Router 入门指南:构建单页面待办应用

一、为什么需要路由系统

在前端开发中,路由系统核心解决两个问题:

  1. 不同视图之间的切换
  2. 浏览器地址栏与视图状态的同步 Vue Router 作为官方路由库,完美集成 Vue 生态,支持:
  • 动态路由匹配
  • 嵌套路由
  • 路由参数解析
  • 导航守卫
  • 多级历史记录

二、环境搭建

首先创建 Vue3 项目并安装路由依赖:

npm init vue@latest # 创建 Vue3 项目
cd your-project
npm install vue-router@4 # 安装 v4 版本适配 Vue3

三、基础概念解析

1. 路由表配置

// 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(), // 使用 HTML5 History 模式
  routes
})

export default router

2. 动态路由匹配

// 配置动态参数路由
{ 
  path: '/user/:id', 
  name: 'User', 
  component: UserProfile,
  props: true // 将路由参数作为组件props
}

3. 嵌套路由实践

// 主路由配置
{
  path: '/dashboard',
  component: DashboardLayout, // 布局容器组件
  children: [
    { path: '', redirect: 'welcome' }, // 默认重定向
    { path: 'welcome', component: WelcomePage },
    { path: 'settings', component: SettingsPage }
  ]
}

四、实战案例:待办事项应用

1. 项目结构设计

src/
├─ components/
│ ├─ NavBar.vue         # 导航栏组件
│ └─ TaskList.vue       # 任务列表组件
├─ views/
│ ├─ Home.vue           # 首页(任务概览)
│ ├─ CreateTask.vue     # 创建任务页
│ └─ TaskDetail.vue     # 任务详情页
├─ router/
│ └─ index.js           # 路由配置文件
└─ App.vue              # 主应用入口

2. 路由配置实现

// src/router/index.js
import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/Home.vue'
import CreateTask from '../views/CreateTask.vue'
import TaskDetail from '../views/TaskDetail.vue'

const routes = [
  { path: '/', name: 'Home', component: Home },
  { path: '/create', name: 'CreateTask', component: CreateTask },
  { path: '/task/:id', name: 'TaskDetail', component: TaskDetail, props: true }
]

const router = createRouter({
  history: createWebHistory(),
  routes,
  scrollBehavior(to, from, savedPosition) {
    return savedPosition || { top: 0 } // 返回滚动位置
  }
})

export default router

3. 导航组件实现

<!-- src/components/NavBar.vue -->
<template>
  <nav>
    <router-link to="/">首页</router-link> |
    <router-link to="/create">创建任务</router-link>
    <div v-if="$route.name === 'TaskDetail'">
      <button @click="editTask">编辑</button>
      <button @click="deleteTask">删除</button>
    </div>
  </nav>
</template>

<script>
export default {
  methods: {
    editTask() { /* 编辑逻辑 */ },
    deleteTask() { /* 删除逻辑 */ }
  }
}
</script>

4. 动态路由参数应用

<!-- src/views/TaskDetail.vue -->
<template>
  <div>
    <h2>{{ task.title }}</h2>
    <p>{{ task.description }}</p >
    <small>创建时间:{{ task.created_at }}</small>
  </div>
</template>

<script>
export default {
  props: ['id'], // 接收路由参数
  data() {
    return {
      task: {} // 模拟任务数据
    }
  },
  created() {
    // 根据 $route.params.id 获取任务数据
    this.fetchTask(this.id)
  },
  watch: {
    '$route.params.id'(newId) { // 监听路由变化
      this.fetchTask(newId)
    }
  },
  methods: {
    fetchTask(id) { /* 根据 ID 获取任务数据 */ }
  }
}
</script>

五、高级特性实现

1. 导航守卫应用

// 全局前置守卫
router.beforeEach((to, from, next) => {
  const isAuthenticated = getUserAuthStatus() // 获取认证状态
  if (to.meta.requiresAuth && !isAuthenticated) {
    next({ path: '/login', query: { redirect: to.fullPath } })
  } else {
    next()
  }
})

2. 元信息配置

// 配置路由元信息
{ 
  path: '/admin', 
  component: AdminPanel, 
  meta: { requiresAuth: true, roles: ['admin'] } 
}

3. 懒加载优化

// 按需加载组件
{ 
  path: '/profile', 
  name: 'Profile', 
  component: () => import('../views/Profile.vue') 
}

六、完整代码示例

App.vue 主入口

<template>
  <div id="app">
    <NavBar />
    <main>
      <router-view />
    </main>
    <Footer />
  </div>
</template>

<script>
import { createApp } from 'vue'
import App from './App.vue'
import router from './router' // 引入路由实例
import NavBar from './components/NavBar.vue'
import Footer from './components/Footer.vue'

const app = createApp(App)
app.use(router) // 注册路由插件
app.mount('#app')
</script>

七、调试技巧

  1. 路由打印console.log(this.$route) 查看当前路由对象
  2. 断点调试:在导航守卫中设置断点,检查路由跳转逻辑
  3. 浏览器工具:使用 Chrome DevTools 的 Network -> XHR 查看路由相关请求
  4. Vue DevTools:检查组件树中的路由匹配情况

通过本文从基础到进阶的学习,你已经掌握了:

  • Vue Router 的核心配置方法
  • 动态/嵌套路由的实现方式
  • 路由参数与组件通信的实践技巧
  • 导航守卫与元信息的配置策略
  • 实际项目中的性能优化方案