欢迎访问宙启技术站
智能推送

Vue入门十二、路由的跳转

发布时间:2023-05-16 07:25:54

在前面的教程中,我们学习了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来获取参数值。路由嵌套可以方便地组合多个组件来进行页面构建。