Vue Router的基本用法
一、安装使用步骤
对于一个现有的使用 JavaScript 包管理器的项目,你可以从 npm registry 中安装 Vue Router:
1
| npm install vue-router@4
|
新建文件src/router/index.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import { createWebHistory, createRouter } from 'vue-router'
const routes = [ { path: '/home', component: ()=>import('./HomeView.vue') }, { path: '/about', component: ()=>import('./AboutView.vue') } ]
const router = createRouter({ history: createWebHistory(), routes, })
export default router
|
在 src/main.js 中导入注册 Vue Router
1 2
| import router from ‘./router’ app.use(router)
|
在App.vue中使用
1 2 3 4 5 6 7 8 9
| <!-- App根组件 -->
<template> <!-- 声明路由链接 --> <router-link to="/home">首页</router-link> <router-link to="/about">关于</router-link> <!-- 声明路由占位符 --> <router-view></router-view> </template>
|
很多时候,我们需要将给定匹配模式的路由映射到同一个组件。
1 2 3 4 5 6 7
| const routes = [ { path: '/users/:id', component: ()=>import('./User.vue') } ]
|
你可以在同一个路由中设置有多个 路径参数,它们会映射到 $route.params 上的相应字段。例如:
| 匹配模式 | 匹配路径 | route.params |
|---|
| /users/:username | /users/eduardo | { username: 'eduardo' } |
| /users/:username/posts/:postId | /users/eduardo/posts/123 | { username: 'eduardo', postId: '123' } |
获取动态路由的值:
1 2 3 4 5 6 7 8 9 10 11 12
| <template> <div> <h3>User---{{ $route.params.id }}</h3> </div> </template>
<script setup> // setup中使用useRoute import {useRoute} from "vue-router" const router = useRoute() console.log(route.params.id) </script>
|
三、路由命名
当创建一个路由时,我们可以选择给路由一个 name:
1 2 3 4 5 6 7
| const routes = [ { path: '/user/:username', name: 'profile', component: User } ]
|
然后我们可以使用 name 而不是 path 来传递 to 属性给 <router-link>:
1 2 3
| <router-link :to="{ name: 'profile', params: { username: 'erina' } }"> User profile </router-link>
|
上述示例将创建一个指向 /user/erina 的链接。
四、编程式导航
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <script setup> // setup中使用useRoute import {useRoute} from "vue-router" const router = useRoute() //字符串路径 router.push('/user/eduardo') //带路径的对象 router.push({path:'/users/eduardo'}) //命名的路由,并加上参数,让路由建立url router.push({name:'user',params:{username:'eduardo'}}) //带查询参数,结果是 /register?plan=private router.push({path:'/register',query:{plan:'private'}}) </script>
|
注意:如果提供了 path,params 会被忽略
1 2 3 4 5 6 7 8 9 10
| const username = 'eduardo'
router.push(`/user/${username}`)
router.push({ path: `/user/${username}` })
router.push({ name: 'user', params: { username } })
router.push({ path: '/user', params: { username } })
|
替换当前位置
它的作用类似于 router.push,唯一不同的是,它在导航时不会向 history 添加新记录,正如它的名字所暗示的那样——它取代了当前的条目。也可以直接在传递给 router.push 的 to 参数中增加一个属性 replace: true :
1 2 3
| router.push({ path: '/home', replace: true })
router.replace({ path: '/home' })
|
横跨历史
1 2 3 4 5 6 7 8 9 10 11 12
| router.go(1)
router.go(-1)
router.go(3)
router.go(-100) router.go(100)
|
五、路由组件传参
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <!-- User.vue --> <script setup> defineProps({ id: String }) </script>
<template> <div> User {{ id }} </div> </template>
|
然后我们可以通过设置 props: true 来配置路由将 id 参数作为 prop 传递给组件:
1 2 3
| const routes = [ { path: '/user/:id', component: User, props: true } ]
|