Page 1 of 1
面板小程序中eventChannel怎么用?
Posted: 2024年 Dec 12日 19:19
by Mical
我的程序是在模版public-sdm的基础上改出来的,问了AI助手,这个问题,AI助手回答的
在子页面:
Page({
onLoad(options) {
// 获取 eventChannel
const eventChannel = this.getOpenerEventChannel();
// 在某个操作完成以后,发送数据回父页面
eventChannel.emit('acceptDataFromOpenedPage', { data: 'some data' });
}
});
在父页面:
ty.navigateTo({
url: 'path_to_your_page',
success: function (res) {
// 监听从子页面发回的数据
res.eventChannel.on('acceptDataFromOpenedPage', function (data) {
console.log(data); // 输出:{ data: 'some data' }
});
}
});
父页面这个配置我会,但是子页面这个,实在是不知道怎么搞。我的添加方式:
usePageEvent('onLoad', () => {
hideMenuButton();
const eventChannel = this.getOpenerEventChannel();
eventChannel.emit('acceptDataFromSchedulePage', { data: 'some data' });
});
报错了,子页面和父页面都报错了。应该是没有正确的引入吧,接口找不到。谁能举例说明一下?
谢谢!
Re: 面板小程序中eventChannel怎么用?
Posted: 2024年 Dec 13日 17:59
by noyobo
Re: 面板小程序中eventChannel怎么用?
Posted: 2025年 Jan 10日 09:47
by Mical
参照这个链接的办法,我解决了页面句柄的问题。编译也通过了。但是运行起来后,
eventChannel.emmit 和 eventChannel.on 这个两个接口都没有找到,报错了。
Re: 面板小程序中eventChannel怎么用?
Posted: 2025年 Jan 10日 10:08
by lshinylee
Re: 面板小程序中eventChannel怎么用?
Posted: 2025年 Jan 10日 10:23
by Mical
父页面:
const jumpUrl = /pages/doodleEdit/index?index=${index}&data=${jsonString}
;
console.log("jumpToEditDoodlePage jumpUrl = " + jumpUrl);
navigateTo({
url: jumpUrl,
success: function(res) {
console.log('success res = ', res);
// 获取 EventChannel 对象
const eventChannel = res.eventChannel;
Code: Select all
// 监听来自子页面的事件,并获取数据
eventChannel.on('acceptDataFromChildPage', function(data) {
console.log('来自子页面的数据:', data);
});
},
});
子页面:
import { usePageEvent, usePageInstance} from '@ray-js/ray';
const page = usePageInstance();
usePageEvent('onLoad', (query) => {
const eventChannel = page.getOpenerEventChannel();
console.log("usePageEvent onLoad:", eventChannel);
// 当需要向父页面传递数据时
eventChannel.emit('sendDataToParent', { data: 'some data' });
});
目前consolo报错是 eventChannel.on 和eventChannel.emit 这两个方法找不到。
index.tsx:235 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'on')
at success (index.tsx:235:22)
at success (service.js?side=service:3:376036)
at service.js?side=service:3:492305
at Object.invoke (C:\Users\19195\AppData\Local\Programs\Tuya MiniApp IDE\resources\app\node_modules\@ark\miniapp-bridge\dist\electron-browser\mothra-bridge.js:1:413)
success @ index.tsx:235
success @ service.js?side=service:3
(anonymous) @ service.js?side=service:3
invoke @ C:\Users\19195\AppData\Local\Programs\Tuya MiniApp IDE\resources\app\node_modules\@ark\miniapp-bridge\dist\electron-browser\mothra-bridge.js:1
await in invoke (async)
value @ service.js?side=service:3
Af @ service.js?side=service:3
navigateTo @ service.js?side=service:3
e.navigateTo @ service.js?side=service:3
jumpToEditDoodlePage @ index.tsx:227
onClick @ index.tsx:266
handler @ createCallbackProxy.js:66
(anonymous) @ Container.js:164
batchedUpdates @ react-reconciler.development.js:14923
cbOrEventHandler @ Container.js:163
Fr @ service.js?side=service:3
value @ service.js?side=service:3
value @ service.js?side=service:3
value @ service.js?side=service:3
$emit @ basic.js:7
onClick @ index.component.js:72
Fr @ service.js?side=service:3
value @ service.js?side=service:3
i @ service.js?side=service:3
setTimeout (async)
ve.setTimeout @ service.js?side=service:3
gt @ service.js?side=service:3
(anonymous) @ service.js?side=service:3
(anonymous) @ service.js?side=service:3
value @ service.js?side=service:3
(anonymous) @ service.js?side=service:3
value @ service.js?side=service:3
(anonymous) @ service.js?side=service:3
(anonymous) @ C:\Users\19195\AppData\Local\Programs\Tuya MiniApp IDE\resources\app\node_modules\@ark\miniapp-bridge\dist\electron-browser\mothra-bridge.js:1
__handle @ C:\Users\19195\AppData\Local\Programs\Tuya MiniApp IDE\resources\app\node_modules\@ark\miniapp-bridge\dist\electron-browser\mothra-bridge.js:1
(anonymous) @ VM422:1
(anonymous) @ node:electron/js2c/renderer_init:2
(anonymous) @ node:electron/js2c/renderer_init:2
emit @ node:events:513
onMessage @ node:electron/js2c/renderer_init:2
service.js?side=service:3 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'emit')
at index.tsx:78:18
at createPageConfig.js:201:37
at batchedUpdates (react-reconciler.development.js
12)
at createPageConfig.js:200:26
at Array.map (<anonymous>)
at Caches2.callLifecycle (createPageConfig.js:199:57)
at Caches2.<anonymous> (createPageConfig.js:153:34)
at step (createPageConfig.js:32:23)
at Object.next (createPageConfig.js:13:53)
at fulfilled (createPageConfig.js:4:58)
Re: 面板小程序中eventChannel怎么用?
Posted: 2025年 Jan 10日 10:34
by Lucy
看下基础库版本是不是最新的, 使用最新的基础库版本
Re: 面板小程序中eventChannel怎么用?
Posted: 2025年 Jan 10日 11:53
by Mical
附件是我使用的配置截图,请帮我看看要调整哪一个配置来尝试。谢谢!
Re: 面板小程序中eventChannel怎么用?
Posted: 2025年 Jan 10日 18:16
by Mical
我把BaseKit调整成最新版本尝试过,依然报同样的错。
Lucy 2025年 Jan 10日 10:34
看下基础库版本是不是最新的, 使用最新的基础库版本
Re: 面板小程序中eventChannel怎么用?
Posted: 2025年 Jan 15日 10:48
by Lucy
navigateTo 属性里要有 events, 要不就没有 res.eventChannel 对象的
Re: 面板小程序中eventChannel怎么用?
Posted: 2025年 Feb 17日 10:18
by Lucy
你好,该问题已超过七天未更新,为整体保障问题跟进效率,我们临时将此标记为已关闭,如有需要请回复并联系我们继续跟进。