小程序页面跳转bug优化记录,getCurrentPages 奇迹妙用解决问题
需求描述:我同事A做的是团餐页面,我做的是团餐地址管理页面,在团餐页面点击收货地址 进入我的地址管理列表页面选择地址后把地址信息address
带到团餐页面,点击返回 回到首页。
过程1:
我和A说我想把带过去的数据存到localstorage
里面去,在使用 wx.navigateTo
跳转到团餐页面,在团餐页面onShow
里定义一个方法去检查 localstorage
里面有没有我存的数据 address
,有的话读取localstorage
的address
重新给收货地址赋值,没有的话设置收货地址为空,但是我同事觉得这样麻烦,于是让我把获取到的地址信息address
转一下 let address = encodeURIComponent(JSON.stringify(address)) || ''
后直接放在链接里 http://跳转的连接?address=${url}
,跳过去,他那边在onload
里面接收数据,有的话证明是从地址管理跳转过去的,把获取到的信息解析出来给地址赋值。
问题1:
这个可以把数据带过去,但是出现了一个问题,就是通过 wx.navigateTo
从地址管理列表页面跳转到团餐页面后,在返回的话又跳到了地址管理页面,(团餐-----点击----->地址列表-----选中地址---->团餐-----返回----->地址列表------返回------>团餐),这样非常不友好。
过程2:
我发现了问题1的bug后,我和同事A沟通了一下,他说这样可行,但是我知道在测试那关肯定过不了,我在查了下微信小程序开发文档,有没有办法跳转到另一个页面不刷新且能把当前页面的数据带过去,文档里关于跳转相关的api,只有 wx.navigateBack(Object object)
跳转 可以不让页面刷新也不会出现返回的问题,
api里面的 getCurrentPages
换这个api好像没用过,查了 下这个api : 获取当前页面栈。数组中第一个元素为首页,最后一个元素为当前页面。 好像手的不是很明白,百度查了下这个 api的大概用法
这个方法貌似可以使用跨页面赋值,
我尝试了一下,,先在团餐页面data里定义一个变量 address:{}
,当点击地址列表的item
的时候,把item
信息赋值给address
,赋值后在跳转弄过去,在团餐页面onshow
里 判断 address
是否有值,有值就把值给收货地址赋值,在点击返回回到首页。成功解决了这个跳转带参数的问题,改好后和同事A沟通了一下,我说把这个跳转你的问题优化了一下,跳转比较友好,他也同意我最新的修改方案。
总结: 在当前页面通过 getCurrentPages
把上一级页面的data数据修改,再返回到上级页面,返回后在上级页面onshow里检查data数据是否有值?有值就渲染带过去的值