收藏
回答

关于路由相关api的success,complete等回调函数触发时机的疑问

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 Bug wx.navigateTo 客户端 7.0.0 2.4.3

- 当前 Bug 的表现(可附上截图)

wx.navigateTo,complete回调的触发时机 ,开发者工具和真机表现不一致,在真机不同微信版本中表现也不一致。

之前在要跳转到的页面实例化之后触发的,能在回调中通过getCurrentPages()获取到要跳转页面的实例对象,在真机上是这样,但在开发者工具上一直不行,考虑到工具和真机的差异,也就没管而是直接用了。

升级到微信7.0后,不知道是不是底层有变动(反正浏览器内核是更新到了v67),在真机上complete的回调中取不到要跳转页面的实例对象,似乎是还没实例化完成。

- 预期表现

wx.navigateTo的success,complete回调在跳转后的页面实例化完成后触发

- 复现路径


- 提供一个最简复现 Demo


最后一次编辑于  01-03
回答关注问题邀请回答
收藏

2 个回答

  • liu志远
    liu志远
    01-07

    真的出bug啊,我的线上程序更惨。

    https://developers.weixin.qq.com/community/develop/doc/0002261d86ce306dd3e78338d59400

    01-07
    赞同
    回复
  • 卢霄霄
    卢霄霄
    01-03

    哈哈哈 并没有遇见过。。你在回调里做啥了啊。。建议去新页面onShow||onLoad里完成吧

    01-03
    赞同
    回复 8
    • &|!🤗
      &|!🤗
      01-03

      我在回调里保留的有上个页面(列表页)里某个特定子组件(列表子项)的上下文,我想在回调里获取新页面(详情页)的实例对象,然后去进行类似一个事件绑定的操作。子组件是监听者,新页面是触发者。

      实际就是在详情页里点赞后,我要更新列表页里对应子项的点赞数和状态。

      现在只能通过setTimeOut这种比较ugly的方式处理了,延时还不能设的太小,感觉是个隐患。

      01-03
      回复
    • 卢霄霄
      卢霄霄
      01-03回复&|!🤗

      在新页面onLoad里进行这个操作不行吗?

      01-03
      回复
    • &|!🤗
      &|!🤗
      01-03回复卢霄霄

      因为事件的触发是在新页面(详情页)里完成的,而对事件的响应需要在旧页面(列表页)里的一个特定的自定义子组件(列表子项)中完成,所以需要能共同取得旧页面特定子组件上下文和新页面上下文,而跳转逻辑是在子组件里进行的,所以一开始就想着通过路由跳转回调去实现,在真机上没问题,升级微信7.0后在真机上也不行了

      01-03
      回复
    • 卢霄霄
      卢霄霄
      01-03回复&|!🤗

      主要是 这本来就是异步的,不是很稳定。。。可以在新页面里拿旧页面的组件上下文啊

      01-03
      回复
    • &|!🤗
      &|!🤗
      01-03回复卢霄霄

      主要是在列表页不好取这个子组件(详情页概览)的上下文,因为列表页实际上是好几个不特定的自定义组件嵌套而成的,这个触发跳转详情的子组件(详情页概览)在最里层,而且在详情页里也会有相同结构功能的子组件(和列表页不尽相同),只有在子组件跳转触发的那个时候取当前子组件(详情页概览)的上下文才最快捷方便。
      要是在详情页取的话不仅要考虑取首页中的子组件上下文,还要考虑取详情页里的子组件的上下文以及不同类型的详情页里该子组件的获取方法。

      01-03
      回复
    查看更多(3)