Vue3 路由

传统多页应用每切换一个页面就请求一个新的 HTML;而单页面应用(SPA)只有一个 HTML,靠 JavaScript 切换显示的内容。路由(Router)就是 SPA 的导航系统:根据 URL 地址渲染对应的组件,让应用既有"多页"的体验又不刷新页面。Vue3 的官方路由是 vue-router 4。

安装路由

先安装路由库,然后创建路由配置文件,通常放在 src/router/index.js:

npm install vue-router@4

创建路由并注册

用 createRouter 创建路由实例,routes 数组把"路径"映射到"组件",再通过 app.use 注册到应用:

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

const router = createRouter({
  history: createWebHistory(), // HTML5 History 模式,地址栏不带 #
  routes: [
    { path: '/', component: Home },
    { path: '/about', component: About },
  ],
})
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')

页面中使用路由

<router-view> 是"出口",当前路径对应的组件就渲染在它所在的位置;<router-link> 是导航链接,点击后切换路由而页面不刷新:

<template>
  <nav>
    <router-link to="/">首页</router-link>
    <router-link to="/about">关于我们</router-link>
  </nav>
  <router-view />
</template>

效果:点击"关于我们",地址栏变为 /about,<router-view> 区域渲染出 About 组件,全程不刷新页面。

动态路由与取参

路径中用冒号定义的段叫动态段,例如 :id。通过 useRoute 获取当前路由对象并读取 params:

// 路由配置
{ path: '/user/:id', component: User }
<template>
  <p>用户 ID:{{ route.params.id }}</p>
</template>
<script setup>
import { useRoute } from 'vue-router'
const route = useRoute()
// 访问 /user/10086 时,页面显示"用户 ID:10086"
</script>

编程式导航

除了点击链接,还可在方法中调用 router.push 跳转;需要替换当前历史记录时用 router.replace:

<script setup>
import { useRouter } from 'vue-router'
const router = useRouter()
const goDetail = () => router.push('/user/10086')
</script>

小结

路由让 SPA 拥有"页面感":createRouter 声明路径与组件的对应关系,<router-view> 当出口、<router-link> 当入口,动态段 :id 负责携带参数,useRouter / useRoute 提供编程式导航。项目页面变多后,还可以结合路由懒加载与导航守卫做性能与权限控制。

笔记加载中…