首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

uniapp页面回退并更新前页数据:高效实现与技巧分享

一、前言

今天做了一个新需求,在一个列表当中,我点击进入此页面的表单页面之后,再提交完表单数据之后需要跳回列表页当中去,并且让我们刚刚填的那个表单选项消失掉。在csdn上看到有很多这种博客,但发现没有契合我需求的推文,所以我今天把两种方法都给大家总结一下,希望对大家有帮助。

二、第一种方式

通过getCurrentPages获取所有页面栈实例列表的方式(直接上代码)

A页面(相当于我上面所说的列表页)

data(){ return{ status:true; //我们要修改的状态或者数据 }}

B页面(也就是我们A跳过去的页面)

goBack(){ let pages = getCurrentPages()//获取所有页面栈的实例列表 let nowPage = pages[ pages.length - 1 ] //当前页面的实例 let prevPage = pages[ pages.length - 2 ] //上一个页面的实例 prevPage.$vm.status = false //更改上一个页面的数据 uni.navigateBack({ delta:1 //返回上一页 })}

但是这种方式个人不是很推荐使用,因为他是获取路由栈的,路由栈会在热更新的时候重置,会报错(其实主要是当时这个方法我不知道我怎么改我当时的数据)

三、第二种方式

所以我尝试了另一种方法,$emit,$on,$off的方式去完成这个修改上一页面值的操作

B页面(我们A跳过去的页面,但是B要返回A页面同时修改值)

methods(){ goBack(){ uni.$emit('newPages',{ id:this.pages.id //这个页面的id value:'你想要传过去的值' }) uni.navigateBack() }}

A页面(B页面返回过来同时修改值)

!!!注意最好不要以这种方式写,不然会出现卸载不掉(off)不掉的问题,卸载不掉!卸载不掉!

methods:{

}

onLoad(){ uni.$on('newPages',(e)=>{ this.infoList.forEach((item)=>{ if(item.id==e.id){ item.value = e.value } }) })}

onUnload(){ uni.$off('newPages')}

这种方式来写是最好的(我们把修改的方法写到methods里面当中去,执行方法和卸载方法必须指向的是同一个地址)

methods:{ upData(){ this.infoList.forEach((item)=>{ if(item.id == e.id){ item.value = e.value //修改值 } }) }},

onLoad(){ uni.$on('newPage',this.upData)//on内部调用的时候,会把传过来的参数塞给on监听的执行函数},

onUnload(){ uni.$off('newPage',this.upData)//这样就可以卸载掉了}

四、总结

总的来说,这两种方法都可以实现跳回列表页并修改上一页面数据的需求。具体选择哪种方法取决于项目的实际需求和架构。无论选择哪种方法,都需要确保数据的同步和一致性,避免出现数据错乱或重复的问题。通过今天的实践和总结,我更加深入地理解了页面间通信和数据同步的重要性,也希望能够为大家在类似需求的开发中提供一些思路和帮助。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OW7lX-GSQ0_S-fUeklh9XWlA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券