原生态的解决方法 页面结构: A页面>B页面>C页面>D页面 理解: EventChannel.emit在创建的时候就根据页面的栈而定好了是哪两个页面间的通信.配合navigateTo与navigateBack来确定其上下级页面.要使EventChannel.emit生效,当前页面不能关闭,所以无法使用redirectTo来跳转,会报meit错.(本来想在BC页面通过redireTo来跳转,这样就能直接将A与D页面连接)navigateBack的delta参数设多级的本质其实是递归弹栈.显示的效果是从D页面跳回到A页面,底层实现其实D>C>B>A.解决: 由此,我在D页面的navigateBack里设置的EventChannel.emit可以在C页面的navigateTo里的events里接收到. 那我可以把C页面当个中继器,在events监听事件中再创建一个EventChannel.emit返回给B页面监听.最后传递到A页面的navigateTo的events监听事件里做逻辑.
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传值回来吗?.?) [图片] 问题:那我要返回多层并且想通过事件传值,能做到吗?.?还是只能直接获取到祖先页面的值,直接改?
2020-06-08[图片]
map受到父样式改变隐藏后,再显示则无法正常显示.需要在手机上预览或者真机调试,ide上显示正常. 点击下一页无法正常显示地图.
2019-08-05