navigateTo 两级页面为同一路由时,后者数据覆盖前者
发布于 5 年前 作者 yang90 8804 次浏览 来自 问答

前提:A[1] 和 A[3] 是同一个路由对应的页面,只是页面数据不同

操作步骤:

通过navigateTo 方法从页面 Home[0] ==> A[1] (图一) ==> B[2] (图二)===> A[3](图三),然后通过回退键从 A[3] ==> B[2](图四) ===> A[1](图五)。如下是操作过程中从开发者工具中看到的AppData 中路由数据情况

                                                                                    图一: Home ==> A[1]

                                                                                    图二: Home ==> A[1] ==> B[2]

                                                                      图三: Home ==> A[1] ==> B[2] ===> A[2]

                                                                图四: A[2]回退到B[2]

                                                                         图五: B[2] 回退到A[1]

从AppData 的情况可以看到,当打开A[3] 页面时,是把A[1] 的数据直接覆盖掉的,而不是往 AppData 里面push一条新的路由信息,所以当从 A[3] 回退到B[2] 再回退到A[1] 时,A页面的数据是没有的,这样也导致A[1]页面数据错误                                                                                                     

2 回复

@黄京 谢谢大佬提供解决方案

在onShow里面,通过getCurrentPages()获取当前页面对象,重新获取数据后,通过setData去重新赋值。可以通过在app里面定义一个全局的数组。来记录返回到当前页面的参数是什么

例: onload 里面 wepy.$instance.globalData.postIdList.push(option.postId)

        onunload里面 wepy.$instance.globalData.postIdList.splice(wepy.$instance.globalData.postIdList.length - 1, wepy.$instance.globalData.postIdList.length)

onshow里面 let postId = wepy.$instance.globalData.postIdList[wepy.$instance.globalData.postIdList.length - 1]

        base.getCurrentPage().setData()        复杂了一些,大概就这样。

回到顶部