uni-app中uni.redirectTo方法缺少eventChannel属性
uni-app中uni.redirectTo方法缺少eventChannel属性
操作步骤:
在App.vue中加入代码
uni.redirectTo({
url: "/pages/tabbar/recharge",
success: (res) => {
console.log("success>>>", res.eventChannel);
},
complete: (res) => {
console.log("complete>>>", res.eventChannel);
},
fail: (err) => {
console.error(err);
}
})
预期结果:
回调函数success或complete中的参数带eventChannel属性
实际结果:
回调函数success或complete中的参数没带eventChannel属性
bug描述:
回调函数success或complete中的参数没带eventChannel属性
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Mac | mac 12.2 | HBuilderX |
HBuilderX | 4.04 | |
Chrome | 122.0.6261.129 |
2 回复
eventChannel 是 和被打开页面进行通信,比如A通过 uni.redirectTo打开了B,A已经已经不存在了
在 uni-app
中,uni.redirectTo
方法确实没有 eventChannel
属性。eventChannel
是 uni.navigateTo
方法中的一个可选参数,用于在页面跳转时传递数据和事件。
如果你需要在页面跳转时传递数据,可以考虑以下几种替代方案:
1. 使用 uni.navigateTo
代替 uni.redirectTo
如果你不需要关闭当前页面,可以使用 uni.navigateTo
,它支持 eventChannel
属性。
uni.navigateTo({
url: '/pages/targetPage/targetPage',
events: {
someEvent: function(data) {
console.log('Received data:', data);
}
},
success: function(res) {
res.eventChannel.emit('someEvent', { message: 'Hello from source page' });
}
});
2. 通过 URL 参数传递数据
你可以通过 URL 参数传递数据,然后在目标页面中解析这些参数。
// 源页面
uni.redirectTo({
url: '/pages/targetPage/targetPage?message=Hello'
});
// 目标页面
onLoad: function(options) {
console.log('Received message:', options.message);
}
3. 使用全局变量或 Vuex
你可以使用全局变量或 Vuex 来存储和传递数据。
// 源页面
globalData.message = 'Hello';
uni.redirectTo({
url: '/pages/targetPage/targetPage'
});
// 目标页面
onLoad: function() {
console.log('Received message:', globalData.message);
}
4. 使用 uni.$emit
和 uni.$on
你可以使用 uni.$emit
和 uni.$on
来在页面之间传递事件和数据。
// 源页面
uni.$emit('someEvent', { message: 'Hello' });
uni.redirectTo({
url: '/pages/targetPage/targetPage'
});
// 目标页面
onLoad: function() {
uni.$on('someEvent', function(data) {
console.log('Received message:', data.message);
});
}