Vue入门十二、路由的跳转
在前面的教程中,我们学习了Vue中的组件和数据绑定。本篇教程我们将学习在Vue中如何进行路由的跳转,方便我们进行页面之间的切换。
Vue路由的跳转是通过vue-router插件来实现的。首先需要安装vue-router插件,可以使用npm来进行安装。
npm install vue-router --save
安装成功后,我们需要在项目中引入vue-router,然后创建一个router实例,再将router实例注入到Vue实例中。
// main.js
import Vue from 'vue'
import router from './router'
Vue.config.productionTip = false
new Vue({
el: '#app',
router, // 将router实例注入Vue实例中
components: { App },
template: '<App/>'
})
在router.js文件中,我们需要引入Vue和vue-router,并创建一个router实例。
// router.js
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const router = new VueRouter({
routes: [
{
path: '/',
name: 'Home',
component: Home
},
{
path: '/about',
name: 'About',
component: About
},
{
path: '/user/:userId',
name: 'User',
component: User
}
]
})
export default router
在router实例中,我们需要配置路由规则,指定路径和组件的对应关系。例如上面的配置中,配置了三条路由规则,分别对应路径'/'、'/about'和'/user/:userId'。其中':'表示动态的路由参数,userId可以是任何值。
接下来,我们学习如何在组件中使用路由进行跳转。
## 声明式导航
在Vue中,我们可以使用<router-link>标签来进行声明式的导航,该标签会自动渲染为一个a标签,并处理路由跳转。
<router-link to="/">Home</router-link>
<router-link to="/about">About</router-link>
<router-link :to="{name: 'User', params: {userId: 123}}">User 123</router-link>
上面的<router-link>标签会渲染为三个超链接,点击超链接时会进行相应的路由跳转。在第三个<router-link>标签中,使用对象语法来进行路由跳转,并使用params参数来传递路由参数。
## 编程式导航
除了声明式导航,Vue也支持编程式的导航,即通过JavaScript代码来进行路由跳转。我们可以通过router实例的方法和属性来进行路由的跳转。
### 路由实例方法
在Vue中,router实例提供了一些方法来进行路由的跳转。
#### push
router.push('/')
使用router.push方法可以将当前页面记录到路由历史记录中,并进行路由跳转。这个方法会向history栈中添加一个新的记录,可以通过浏览器的前进和后退按钮进行相应的操作。如果跳转的是相同的路径,则不会进行跳转。
#### replace
router.replace('/')
与push方法类似,使用router.replace方法可以进行路由跳转,但不会向history栈中添加记录,而是用新页面替换掉当前页面。这个方法可以用来进行不需要在history中记录的敏感操作。
#### go
router.go(-1)
使用router.go方法可以向前或向后go指定的路由记录数。这个方法和浏览器的history.go方法类似。
### 路由实例属性
在Vue中,router实例也提供了一些属性来方便我们进行路由的操作。
#### $route
$route是一个当前路由的元数据对象,它包含了路由参数、路径、hash和查询参数等信息。
在组件中,可以通过this.$route来访问$route对象,从而获取当前路由的详细信息。
#### $router
$router是一个路由实例,它提供了一些路由相关的方法,如push、replace、go等。
在组件中,可以通过this.$router来访问$router实例,从而进行路由的跳转。
## 路由传参
在Vue中,我们可以通过$route.params来获取路由参数。例如上面的路由规则中,我们通过':userId'来定义了动态的路由参数。
{
path: '/user/:userId',
name: 'User',
component: User
}
在User组件中,我们可以通过$route.params来获取路由参数。
<template>
<div>
User {{ $route.params.userId }}
</div>
</template>
注意,在诸如 /user/:id 这样的动态路径中,参数 id 可以通过 $route.params.id 来取到。
## 路由嵌套
在Vue中,我们也可以进行路由嵌套,这样可以更加方便地组合多个组件来进行页面的构建。
例如,我们可以在App组件中定义一个RouterView作为路由的出口,然后将其他组件进行嵌套。
// App.vue
<template>
<div id="app">
<router-link to="/">Home</router-link>
<router-link to="/about">About</router-link>
<router-view></router-view>
</div>
</template>
// router.js
const router = new VueRouter({
routes: [
{
path: '/',
name: 'Home',
component: Home
},
{
path: '/about',
name: 'About',
component: About,
children: [
{
path: 'contact',
name: 'Contact',
component: Contact
}
]
}
]
})
在这个例子中,我们将About组件进行嵌套,并在其下又定义了一个路由规则。当访问/about路径时,会先渲染About组件,然后再根据子路由规则渲染对应的组件。
## 总结
本篇教程我们学习了在Vue中如何进行路由的跳转,以及如何进行路由的嵌套和传参。Vue路由的导航是通过<router-link>标签进行声明式导航,以及通过$router实例进行编程式导航。在路由跳转时,我们也可以进行路由参数的传递,并在组件中通过$route.params来获取参数值。路由嵌套可以方便地组合多个组件来进行页面构建。
