页面跳转时保存当前页面的状态

本文介绍了一种在Vue应用中通过路由元信息实现组件缓存的方法。利用<keep-alive>标签配合路由配置中的'meta'字段来区分哪些视图组件需要被缓存,从而提高用户体验和应用性能。

app.vue页

<keep-alive>
	<router-view v-if="$route.meta.keepAlive"></router-view>
</kepp-alive>
	<router-view v-if="!$route.meta.keepAlive"></router-view>

router.js

{
  path: '/',
  name: 'xxx',
  component: ()=>import('../src/views/xxx.vue'),
  meta:{
    keepAlive: true // 需要被缓存
  }
}, 
在 Vue 中实现页面跳转保存当前页面信息,通常涉及以下几种方式: --- ## ✅ 实现方式 ### 1. 使用 `Vuex` 保存页面状态 Vuex 是 Vue 的状态管理库,非常适合用于在页面跳转保存和恢复状态。 #### 示例代码: ```javascript // store.js import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ state: { formData: {} }, mutations: { SET_FORM_DATA(state, data) { state.formData = data } }, actions: { saveFormData({ commit }, data) { commit('SET_FORM_DATA', data) } }, modules: {} }) ``` ```javascript // main.js import Vue from 'vue' import App from './App.vue' import router from './router' import store from './store' new Vue({ router, store, render: h => h(App) }).$mount('#app') ``` ```vue <!-- PageA.vue --> <template> <div> <input v-model="form.name" /> <button @click="saveAndGo">跳转到 B 页面</button> </div> </template> <script> export default { data() { return { form: { name: '' } } }, methods: { saveAndGo() { this.$store.dispatch('saveFormData', this.form) this.$router.push('/pageB') } } } </script> ``` ```vue <!-- PageB.vue --> <template> <div> <p>保存的名称是:{{ savedName }}</p> </div> </template> <script> export default { data() { return { savedName: '' } }, mounted() { const formData = this.$store.state.formData this.savedName = formData.name } } </script> ``` --- ### 2. 使用 `localStorage` 或 `sessionStorage` 如果需要持久化保存(如刷新后仍然保留),可以使用 `localStorage` 或 `sessionStorage`。 #### 示例代码: ```vue <!-- PageA.vue --> <template> <div> <input v-model="form.name" /> <button @click="saveAndGo">跳转到 B 页面</button> </div> </template> <script> export default { data() { return { form: { name: '' } } }, methods: { saveAndGo() { localStorage.setItem('savedFormData', JSON.stringify(this.form)) this.$router.push('/pageB') } } } </script> ``` ```vue <!-- PageB.vue --> <template> <div> <p>保存的名称是:{{ savedName }}</p> </div> </template> <script> export default { data() { return { savedName: '' } }, mounted() { const saved = localStorage.getItem('savedFormData') if (saved) { const formData = JSON.parse(saved) this.savedName = formData.name } } } </script> ``` --- ### 3. 使用路由参数(适合少量数据) 适用于传递简单参数(如 ID),不适合传递大量表单数据。 #### 示例: ```javascript // 跳转传参 this.$router.push({ path: '/pageB', query: { name: this.form.name } }) ``` ```vue <!-- PageB.vue --> <script> export default { mounted() { const name = this.$route.query.name console.log('接收到的名字:', name) } } </script> ``` --- ## ✅ 总结对比 | 方式 | 适用场景 | 是否持久化 | 是否适合复杂数据 | |------|----------|------------|------------------| | Vuex | 多页面共享状态 | ❌(刷新丢失) | ✅ | | localStorage | 持久化保存数据 | ✅ | ✅ | | sessionStorage | 会话期间保存数据 | ❌(关闭页面丢失) | ✅ | | 路由参数 | 传递简单参数 | ❌ | ❌ | --- ##
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值