vue 详情页修改数据返回主页面后修改主页面该条数据且其他数据保留

42 篇文章 1 订阅
40 篇文章 7 订阅

目标需求:
1:从a页面(例如表格、表单等)某行数据跳转到b页面,
2:b页面不调用后端接口,只是前端页面的数据修改,
3:修改b页面数据后,返回a页面,此时a页面该行数据修改,且其他数据保持不变;
实现原理:
1:a页面跳转b页面,数据可由路由带过去;
2:b页面跳转a页面,b页面修改a页面的数据,通过eventBus修改;
3:b页面跳转a页面,a页面数据保留的数据,通过keep-alive方式;
相关文档:
1:eventBus:链接
2:keep-alive vue2.0: 链接
3:keep-alive vue3.0: 链接

实现过程

1、main.js

全局注册bus实例
方便后续调用,实现b页面修改a页面数据

new Vue({
    el: '#app',
    router,
    store, //使用store vuex状态管理
    components: { App },
    template: '<App/>',
    data: {
        // 空的实例放到根组件下,所有的子组件都能调用
        Bus: new Vue()
    }
})
2、app.vue

引入keep-alive
实现a页面原数据的保留

  <div id="app">
    <keep-alive>
      <router-view v-if="$route.meta.keepAlive" />
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive" />
  </div>
3、router中

为a页面添加属性,便于判断出该页面需要数据保留

 {
      path: '/demoA',
      name: 'demoA',
      component: demoA,
      meta:{
          keepAlive:true // 需要缓存
      }
    },
4、b页面

使用路由返回的方式,保证a页面原数据不被刷新
通过eventBus将b页面修改数据传给a页面

<van-button type="info" @click="goBack">确定</van-button>
<script>
	methods: {
		goBack () {
      		window.history.back()
      		this.$root.Bus.$emit('toggle', this.value) // this.value:需要传输的数据
   	    }
    }
</script>
5、a页面

获取a页面传过来的数据

// 事件监听---在created或者mounted中
this.$root.Bus.$on('事件名称', value => {
  // value即为b页面传过来的数据
}
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue提供了许多选项和方法来保存和操作当前页面数据,以实现在跳转到下一个页面后仍能返回当前页面保留数据的需求。其中,可以使用Vue路由中的导航守卫来处理这种情况。 导航守卫分为全局导航守卫和局部导航守卫。比较适合处理当前问题的是前者,可以在全局导航守卫中定义保存当前页面数据的方法,并在路由跳转时确保数据得到正确保存。 具体实现方式可以分为以下步骤: 1. 在Vue路由文件中定义全局导航守卫beforeEach和afterEach ```javascript router.beforeEach((to, from, next) => { saveData(from); next(); }) router.afterEach((to, from) => { loadData(to); }) ``` 其中,beforeEach方法在路由跳转前执行,利用saveData方法将当前页面数据保存下来;afterEach方法在路由跳转后执行,利用loadData方法将保存的数据加载回当前页面。 2. 编写保存和加载数据的方法,在本例中选择使用localStorage存储数据。 ```javascript function saveData(from) { localStorage.setItem('pageData', JSON.stringify(from)); } function loadData(to) { let data = localStorage.getItem('pageData'); if(data) { data = JSON.parse(data); if(to.name === data.name) { to.params = data.params; } else { localStorage.removeItem('pageData'); } } } ``` 其中,saveData方法将from对象序列化成JSON字符串存储在localStorage中;loadData方法则从localStorage中读取数据,并在to对象的params属性中存储。同时,需要注意的是只有当目标路由和源路由是同一个时才会加载数据,否则需要清除localStorage中的数据避免后续操作的干扰。 通过以上操作,即可在Vue项目中实现跳转下一级前保留当前页面数据返回后能够正确加载的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hyduan200

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值