HarmonyOS 鸿蒙Next Provide修饰的数据是否无法emit
HarmonyOS 鸿蒙Next Provide修饰的数据是否无法emit
在使用@Provide修饰的变量进行emiit操作的时候发现订阅方收到的数据为空
发送方和订阅方都是通过@Component修饰的页面,发送的数据使用provide修饰的数据 示例代码大概如下所示,有删减,需要调整使用
[@Entry](/user/Entry)
[@Component](/user/Component)
export struct BaseScanPage{
[@Provide](/user/Provide) testResult:Array<string> = ["2333333"]
aboutToAppear() {
FMEmitter.onScanResult((result)=>{
console.log(JSON.stringify(result))
})
}
onResult(){
FMEmitter.emitScanResult(this.testResult)
}
}
/**
* 订阅 - 扫码回调
*/
onScanResult(callback: FMEmitterCallback<emitter.EventData>) {
this.on(scanSuccessBack, callback)
}
offScanResult() {
emitter.off(scanSuccessBack.eventId)
}
/**
* 发送 - 扫码成功回调
*/
emitScanResult(result?: Array<string>) {
let eventData: emitter.EventData = {
data: {
"result": result
}
}
this.emit(scanSuccessBack, eventData)
}
export const scanSuccessBack: emitter.InnerEvent = {
eventId: 72
}
调用onResult在接收处接收不到数据
更多关于HarmonyOS 鸿蒙Next Provide修饰的数据是否无法emit的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
发送的@Provide修饰的变量可以被接收,可以参考demo:
import { BusinessError, emitter } from '@kit.BasicServicesKit';
import { router } from '@kit.ArkUI';
@Entry
@Component
export struct BaseScanPage{
[@Provide](/user/Provide) testResult:Array<string> = ["2333333"]
build() {
Column()
{
Button('发送')
.onClick(()=>{
this.emitScanResult(this.testResult)
})
Button('跳转').onClick(()=>{
try {
router.pushUrl({
url: 'pages/Index30',
})
} catch (err) {
console.error(`pushUrl failed, code is ${(err as BusinessError).code}, message is ${(err as BusinessError).message}`);
}
})
}
}
/**
* 发送 - 扫码成功回调
*/
emitScanResult(result?: Array<string>) {
let event: emitter.InnerEvent = {
eventId: 1,
priority: emitter.EventPriority.LOW
};
let eventData: emitter.EventData = {
data: {
"result": result
}
};
// 发送eventId为1的事件,事件内容为eventData
emitter.emit(event, eventData);
}
}
import { emitter } from '@kit.BasicServicesKit';
import { promptAction } from '@kit.ArkUI';
import { hilog } from '@kit.PerformanceAnalysisKit';
const TAG: string = 'ThreadModel';
const DOMAIN_NUMBER: number = 0xFF00;
@Entry
@Component
export struct Index30{
aboutToAppear() {
// 定义一个eventId为1的事件
let event: emitter.InnerEvent = {
eventId: 1
};
// 收到eventId为1的事件后执行该回调
let callback = (eventData: emitter.EventData): void => {
promptAction.showToast({
message: JSON.stringify(eventData)
});
console.log('1111:::',JSON.stringify(eventData))
hilog.info(DOMAIN_NUMBER, TAG, 'event callback:' + JSON.stringify(eventData));
};
// 订阅eventId为1的事件
emitter.on(event, callback);
promptAction.showToast({
message: JSON.stringify('emitter subscribe success')
});
}
build() {
Column()
{
Button('接收')
.onClick(()=>{
})
}
}
}
参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/itc-with-emitter-V5
更多关于HarmonyOS 鸿蒙Next Provide修饰的数据是否无法emit的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙系统中,Provide
修饰的数据并非无法emit
。Provide
主要用于定义跨模块通信中的提供方数据,而emit
通常与事件或数据流相关。在鸿蒙的分布式系统中,模块间通信机制包括数据提供与订阅、服务发布与发现等。
Provide
装饰的数据可以通过特定的接口或API进行更新和发布,使得订阅这些数据的其他模块能够实时获取到最新的数据状态。这种机制确保了数据的一致性和实时性,但并不直接等同于事件驱动的emit
操作。
如果需要在鸿蒙系统中实现类似emit
的功能,可以考虑使用事件通道或数据管道等机制来传递数据或事件。这些机制允许模块间异步传递数据或事件,从而实现更复杂的交互逻辑。
总之,Provide
修饰的数据在鸿蒙系统中是可以被更新和发布的,但需要通过系统提供的通信机制来实现,而不是直接使用emit
这样的操作。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html