收藏
回答

wx.navigateBack(Object object) 返回多层时如何传值?

页面结构:

A页面>B页面>C页面>D页面

现在A列表页面通过navigateTo跳转到B页面,同时监听一个事件,随着流程的执行,走到了D页面,提交返回到A页面并返回空值,唤醒A页面的监听,来删除列表中处理过的记录.

A页面跳转逻辑:

trackView: function (event) {
    let that = this;
    var id = event.currentTarget.dataset.id;
    var index = event.currentTarget.dataset.index;
    // 跳转到B并监听completionTask事件
    wx.navigateTo({
      url: "../B/B?id=" + id ,
      events: {
        completionTask:function(){
          that.data.record.dataList.splice(index,1);
        }
      }
    })
  },

D页面返回逻辑:

 // 保存
  formSubmit:function(e){
    let that = this;
    const eventChannel = this.getOpenerEventChannel();
    // 向上跳转三层回到A页面,并发送completionTask事件
    wx.navigateBack({
      delta:3,
      success:function(res){
        eventChannel.emit('completionTask',{});
      }
    })

最后发现A页面并没有监听到completionTask事件.

看官方示例说是:获取被打开页面传送到当前页面的数据. (意思是只能url上写着的页面才能emit传值回来吗?.?)

问题:那我要返回多层并且想通过事件传值,能做到吗?.?还是只能直接获取到祖先页面的值,直接改?


回答关注问题邀请回答
收藏

4 个回答

  • 应恒奕
    应恒奕
    2020-06-08

    原生态的解决方法

    页面结构:

    A页面>B页面>C页面>D页面

    理解:

    1. EventChannel.emit在创建的时候就根据页面的栈而定好了是哪两个页面间的通信.配合navigateTo与navigateBack来确定其上下级页面.
    2. 要使EventChannel.emit生效,当前页面不能关闭,所以无法使用redirectTo来跳转,会报meit错.(本来想在BC页面通过redireTo来跳转,这样就能直接将A与D页面连接)
    3. navigateBack的delta参数设多级的本质其实是递归弹栈.显示的效果是从D页面跳回到A页面,底层实现其实D>C>B>A.

    解决:

    由此,我在D页面的navigateBack里设置EventChannel.emit可以在C页面的navigateTo里的events里接收到.

    那我可以把C页面当个中继器,在events监听事件中再创建一个EventChannel.emit返回给B页面监听.最后传递到A页面的navigateTo的events监听事件里做逻辑.

    2020-06-08
    有用 5
    回复
  • Joson
    Joson
    2020-06-08
    可以曲线救国 1.A页面onShow监听全局变量 2.D页面将值赋给全局变量(可以挂在wx/ global/app.globalData上)
    2020-06-08
    有用
    回复
  • 默
    2020-06-08

    你A页面打开的是B页面 传递数据也是在B页面执行 不会传送到D页面的


    2020-06-08
    有用
    回复 2
    • 应恒奕
      应恒奕
      2020-06-08
      但我想回传数据从D页面到A页面
      2020-06-08
      回复
    • 默
      2020-06-08回复应恒奕
      利用缓存或者全局变量
      2020-06-08
      回复
  • 鹏宇zero
    鹏宇zero
    2020-06-08

    看你问题,就是想做一个路由,然后传参。。。

    你可以试下:全局状态管理。

    https://developers.weixin.qq.com/community/develop/article/doc/000242e15441083ecb99843bb51413

    2020-06-08
    有用
    回复
登录 后发表内容
问题标签