收藏
回答

navigateTo 两级页面为同一路由时,后者数据覆盖前者

问题模块 框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
API和组件 小程序 Bug wx.navigateTo api 微信iOS客户端 iOS 6.6.1 1.9.91

前提: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]页面数据错误                                                                                                     

最后一次编辑于  2018-04-02  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

2 个回答

  • Alan龙少
    Alan龙少
    2018-04-03

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

    2018-04-03
    赞同
    回复
  • 黄京
    黄京
    2018-04-03

    在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()        复杂了一些,大概就这样。

    2018-04-03
    赞同
    回复