Vue中如何使用路由实现页面之间的数据共享?

1. 关于Vue路由

Vue.js 是一个 MVVM 框架,常用于构建单页面应用程序 (SPA)。在单页面应用中,多个组件拼接成整个页面。Vue.js 中的路由机制允许我们通过 URL 来控制组件的显示和隐藏,从而实现单页面应用中的页面切换功能。Vue.js 的路由机制默认使用的是 Vue Router。Vue Router 是官方提供的路由管理器,可以用于构建 SPA。

Vue Router 非常的强大,不仅可以实现页面之间的路由跳转,还可以进行方便的参数传递、路由嵌套、路由拦截等诸多功能。其中,路由参数传递是实现页面数据共享的一种方式。

2. Vue路由中的参数传递

Vue Router提供了三种类型的参数传递:

- params 参数

- query 参数

- 动态路由

2.1 params 参数传递

params 是一种基于URL的参数传递方式, 参数会被设置到 $route.params 中。使用params进行传递参数时,必须在路由配置中声明这个参数,不然会导致参数丢失。

具体实现方式如下:

//router/index.js

{

path: '/user/:id',

name: 'user',

component: UserPage

}

//UserPage.vue

{

//...

}

在路由配置中声明参数id,可以在 UserPage 组件通过 $route.params.id 访问这个参数。示例代码如下:

//UserPage.vue

<template>

<div>

<p>用户ID: <strong>{{ $route.params.id }}</strong></p>

</div>

</template>

在上面的示例中,我们使用了路由参数来传递用户的id,然后在 UserPage 组件中通过 $route.params.id 获取了这个参数。这样,我们就可以在不同的页面之间传递参数了。

注意:params 是基于URL的参数传递,因此参数是以明文的形式展示的,传输的数据不够安全。不建议将敏感数据通过 params 传递。

2.2 query 参数传递

query 参数是通过 URL 参数传递的,可以通过 $route.query 访问这些参数。query 的参数不需要再路由配置中声明,因此比较灵活。

具体实现方式如下:

//router/index.js

{

path: '/product',

name: 'product',

component: ProductPage

}

//ProductPage.vue

<template>

<div>

<p>产品ID: <strong>{{ $route.query.id }}</strong></p>

</div>

</template>

//当通过以下的 URL 访问产品页面时,可以携带id这个参数

//https://example.com/product?id=123

在上面的示例中,我们在 URL 中携带了参数 id,然后在 ProductPage 组件中通过 $route.query.id 获取了这个参数。

2.3 动态路由参数传递

除了params和query参数传递外,Vue Router 还支持动态路由参数传递。

举个例子,我们可以设置一个 /books/:id 的路由规则,来匹配/books/1、/books/2、/books/3这样的 URL。其中,:id就是一个动态路由参数。

具体实现方式如下:

//router/index.js

{

path: '/books/:id',

name: 'books',

component: BooksPage

}

//BooksPage.vue

<template>

<div>

<p>书籍ID: <strong>{{ $route.params.id }}</strong></p>

</div>

</template>

//当通过以下的 URL 访问书籍页面时,可以携带id这个参数

//https://example.com/books/123

在上面的示例中,我们在路由规则中设置了动态路由参数 :id,然后在 BooksPage 组件中通过 $route.params.id 获取了这个参数。

3. 页面之间的数据共享

到这里,我们已经了解了 Vue Router 中三种参数传递方式。接下来,我们就可以利用这些技巧来实现页面之间的数据共享。

3.1 父子组件之间的数据传递

在 Vue.js 中,父子组件之间的数据共享非常方便,我们可以通过 props 属性来实现数据传递,也可以通过 $emit 这样的方法进行事件监听和传递数据。

3.2 Vuex 状态管理器

Vue.js 提供了一个 Vuex 状态管理器,用于管理应用程序中的状态数据。Vuex 中的状态数据可以在应用程序中的任何地方进行访问和修改,因此非常适合实现页面之间的数据共享。

预览在Vuex中定义状态的示例代码如下:

//store/index.js

import Vue from 'vue'

import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({

state: {

userInfo: null,

},

mutations: {

setUserInfo(state, info) {

state.userInfo = info

},

},

})

export default store

在上面的示例代码中,我们定义了一个名为 userInfo 的状态,使用 mutations 中的方法 setUserInfo 来修改这个状态。

预览在组件中获取和修改状态数据的示例代码如下:

//UserPage.vue

<template>

<div>

<p>用户ID: <strong>{{ $route.params.id }}</strong></p>

<p>用户信息: {{ userInfo }}</p>

<button @click="onClick">修改用户信息</button>

</div>

</template>

<script>

import { mapState, mapMutations } from 'vuex'

export default {

computed: {

...mapState(['userInfo']),

},

methods: {

...mapMutations(['setUserInfo']),

onClick() {

this.setUserInfo({ id: this.$route.params.id, name: '张三' })

},

},

}

</script>

在上面的示例代码中,我们在 UserPage 组件中使用 mapState 和 mapMutations 函数来获取和修改 store 中的状态数据。

4. 总结

本文介绍了 Vue.js 中的路由机制,并介绍了 Vue Router 中的三种参数传递方式。通过这些技术,我们可以实现页面之间的数据共享,增强应用程序的交互性和可用性。除此之外,使用 Vuex 状态管理器,我们还可以实现全局状态数据的管理,方便应用程序的状态维护。