Vue3 + Vue Router 4 完整示例(可直接运行)

我给你最完整、最标准、可直接复制运行 的 Vue3 路由全套示例,包含: ✅ 路由配置

✅ 页面跳转

✅ 路由传参

✅ 动态路由

✅ 嵌套路由(子路由)

✅ 404 页面

✅ 路由守卫(登录拦截)

✅ 组合式 API 完整用法

一、项目结构(照着建)

bash 复制代码
src/
├── router/
│   └── index.js       # 路由配置
├── views/             # 页面组件
│   ├── Home.vue
│   ├── About.vue
│   ├── User.vue
│   ├── Login.vue
│   ├── NotFound.vue
│   └── Dashboard/     # 嵌套路由文件夹
│       ├── Dashboard.vue
│       ├── Profile.vue
│       └── Order.vue
├── App.vue
└── main.js

二、安装路由

bash 复制代码
npm install vue-router@4

三、完整代码(直接复制)

1. 路由配置:src/router/index.js

javascript 复制代码
import { createRouter, createWebHistory } from 'vue-router'

// 导入页面
import Home from '../views/Home.vue'
import Login from '../views/Login.vue'
import NotFound from '../views/NotFound.vue'

// 路由规则
const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home,
    meta: { requiresAuth: true } // 需要登录才能访问
  },
  {
    path: '/about',
    name: 'About',
    component: () => import('../views/About.vue') // 懒加载
  },
  {
    path: '/user/:id', // 动态路由
    name: 'User',
    component: () => import('../views/User.vue')
  },
  {
    path: '/login',
    component: Login
  },
  // 嵌套路由示例
  {
    path: '/dashboard',
    component: () => import('../views/Dashboard/Dashboard.vue'),
    meta: { requiresAuth: true },
    children: [
      { path: 'profile', component: () => import('../views/Dashboard/Profile.vue') },
      { path: 'order', component: () => import('../views/Dashboard/Order.vue') }
    ]
  },
  // 404 页面
  {
    path: '/:pathMatch(.*)*',
    component: NotFound
  }
]

const router = createRouter({
  history: createWebHistory(),
  routes
})

// 路由守卫(登录验证)
router.beforeEach((to, from, next) => {
  const isLogin = localStorage.getItem('token') // 模拟登录状态

  if (to.meta.requiresAuth && !isLogin) {
    next('/login') // 未登录,跳转到登录页
  } else {
    next() // 放行
  }
})

export default router

2. 挂载路由:src/main.js

javascript 复制代码
import { createApp } from 'vue'
import App from './App.vue'
import router from './router' // 导入路由

createApp(App).use(router).mount('#app')

3. 根组件:App.vue

vue 复制代码
<template>
  <nav>
    <router-link to="/">首页</router-link> |
    <router-link to="/about">关于</router-link> |
    <router-link to="/user/1001">用户 1001</router-link> |
    <router-link to="/dashboard">控制台</router-link> |
    <router-link to="/login">登录</router-link>
  </nav>

  <div style="padding: 20px;">
    <router-view></router-view> <!-- 页面出口 -->
  </div>
</template>

四、页面组件代码

🏠 Home.vue(首页)

vue 复制代码
<template>
  <h2>首页(需要登录)</h2>
  <button @click="goToAbout">跳转到关于页</button>
</template>

<script setup>
import { useRouter } from 'vue-router'
const router = useRouter()

const goToAbout = () => {
  router.push('/about')
}
</script>

ℹ️ About.vue(关于页)

vue 复制代码
<template>
  <h2>关于页</h2>
  <p>当前路径:{{ route.path }}</p>
  <button @click="back">返回</button>
</template>

<script setup>
import { useRouter, useRoute } from 'vue-router'
const router = useRouter()
const route = useRoute()

const back = () => {
  router.go(-1)
}
</script>

👤 User.vue(动态路由)

vue 复制代码
<template>
  <h2>用户页</h2>
  <p>用户 ID:{{ route.params.id }}</p>
</template>

<script setup>
import { useRoute } from 'vue-router'
const route = useRoute()
</script>

🔐 Login.vue(登录页)

vue 复制代码
<template>
  <h2>登录页</h2>
  <button @click="login">登录</button>
</template>

<script setup>
import { useRouter } from 'vue-router'
const router = useRouter()

const login = () => {
  localStorage.setItem('token', '123456') // 模拟登录
  router.push('/') // 跳回首页
}
</script>

📊 Dashboard.vue(嵌套父路由)

vue 复制代码
<template>
  <h2>控制台</h2>
  <router-link to="/dashboard/profile">个人资料</router-link> |
  <router-link to="/dashboard/order">订单</router-link>
  <router-view></router-view>
</template>

📄 Profile.vue + Order.vue(子页面)

vue 复制代码
<!-- Profile.vue -->
<template><h4>个人资料</h4></template>

<!-- Order.vue -->
<template><h4>订单页面</h4></template>

❌ NotFound.vue

vue 复制代码
<template>
  <h2>404 页面不存在</h2>
</template>

五、运行项目

bash 复制代码
npm run dev

六、这个示例包含的所有功能

  1. 基础路由 :/ /about
  2. 动态路由 :/user/1001
  3. 嵌套路由 :/dashboard/profile
  4. 路由懒加载:优化性能
  5. 路由守卫:登录权限控制
  6. 404 页面
  7. 组合式 API :useRouter useRoute
  8. 声明式导航 + 编程式导航

总结

这是企业级标准 Vue3 路由完整示例 ,直接复制即可运行,包含你开发项目会用到的 99% 路由功能。

相关推荐
小码哥_常2 分钟前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
蜗牛攻城狮2 小时前
微前端四大方案选型对比与最佳实践:qiankun、micro-app、wujie、Module Federation
前端·微前端·qiankun·前端架构·micro-app·wujie
她说可以呀4 小时前
Vue插槽
前端·javascript·vue.js
qq_448011164 小时前
Vue + Jinja2两套模版与法冲突造成undefinedError
前端·javascript·vue.js
aixingpan4 小时前
aixingpan.cn API开发文档:前端查询夏令时和时区接口指南
前端·php
2601_958352905 小时前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块
志尊宝5 小时前
AI原生前端开发(039):AI辅助的Nuxt 4全栈开发
前端·vue.js·ai-native
FRing036 小时前
JavaScript入门到精通三十二(深拷贝、浅拷贝、递归函数)
开发语言·前端·javascript
excel6 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
外收内放6 小时前
Python基础语法练习题(73)
java·前端·python