前一个版本在页面间传值时,采用的是将对象缓存在 app.js 中,然后在 onLoad() 中将其获取并设置为 null 的方式;在当前版本中,采用了依赖 EventChannel 进行传值的方式,但是管理后台出现大量报错,错误为 this.getOpenerEventChannel().on is not a function,本地开发工具和真机调试均无法复现该异常。
相关情况如下:
发布新版本时为全量发布;管理后台基本库最低设置为 2.7.3;报错页面无其它跳转进入途径;
相关代码如下:
第一个页面
toPrescription: function() {
let that = this;
util.checkUserState(-1, true, function (res) {
let acceptData = {
'selectedMember': null
}
if (that.data.members.length > 0 && that.data.members[0].isSelf) {
acceptData.selectedMember = that.data.members[0];
}
wx.navigateTo({
url: '/pages/diagnosis/prescription/prescription',
success: function (res) {
// 通过eventChannel向被打开页面传送数据
res.eventChannel.emit('toPrescription', { data: acceptData });
}
});
});
},
第二个页面
onLoad: function(options) {
let that = this;
let eventChannel = this.getOpenerEventChannel();
// 监听事件,获取上一页面通过eventChannel传送到当前页面的数据
eventChannel.on('toPrescription', function (data) {
let acceptData = data.data;
if (acceptData && acceptData.selectedMember) {
that.setData({
selectedMember: acceptData.selectedMember
});
}
});
},
管理后台截图:
TypeError: eventChannel.on is not a function 怎么办
同遇到一样的问题,调试基础库用的是2.19.2
同,报错内容为
this.getOpenerEventChannel(...).emit is not a function
你好,管理后台错误截图补充下。
onLoad: function(options) {
let that = this;
try {
let eventChannel = this.getOpenerEventChannel();
// 监听事件,获取上一页面通过eventChannel传送到当前页面的数据
eventChannel.on('toPrescription', function (data) {
let acceptData = data.data;
if (acceptData && acceptData.selectedMember) {
that.setData({
selectedMember: acceptData.selectedMember
});
}
});
} catch (error) {
console.log("忽略该异常", error);
}
},