页面结构:
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传值回来吗?.?)
问题:那我要返回多层并且想通过事件传值,能做到吗?.?还是只能直接获取到祖先页面的值,直接改?
原生态的解决方法
页面结构:
A页面>B页面>C页面>D页面
理解:
解决:
由此,我在D页面的navigateBack里设置的EventChannel.emit可以在C页面的navigateTo里的events里接收到.
那我可以把C页面当个中继器,在events监听事件中再创建一个EventChannel.emit返回给B页面监听.最后传递到A页面的navigateTo的events监听事件里做逻辑.
你A页面打开的是B页面 传递数据也是在B页面执行 不会传送到D页面的
看你问题,就是想做一个路由,然后传参。。。
你可以试下:全局状态管理。
https://developers.weixin.qq.com/community/develop/article/doc/000242e15441083ecb99843bb51413