HarmonyOS 鸿蒙Next 卡片服务组件如何传递数据
HarmonyOS 鸿蒙Next 卡片服务组件如何传递数据
我的理解是发送数据使用这个方法
```javascript
private processTogetherData(formInfo: FormInfo, data: TogetherInfo[]): void {
Logger.info(WidgetFormConstant.TAG, '' + JSON.stringify(data))
let togetherList: TogetherCardInfo[] = this.fetchResult(data);
let obj: CardInfo = {};
obj.togetherList = togetherList;
let formData = formBindingData.createFormBindingData(obj);
formProvider.updateForm(formInfo.form_id, formData).then(() => {
Logger.info('UpdateForm success', JSON.stringify(togetherList))
}).catch((err: Error) => {
Logger.error(WidgetFormConstant.TAG, `${formInfo.form_id} processTogetherData updateForm, err: ${JSON.stringify(err)}`);
});
}
接收数据如下
let togetherStorage = new LocalStorage();
[@Entry](/user/Entry)(togetherStorage)
[@Component](/user/Component)
struct Together_widgetCard {
[@LocalStorageProp](/user/LocalStorageProp)('togetherList') togetherList: CardInfo[] = [];
/*
* The title.
*/
readonly TITLE: string = '在一起';
/*
* The action type.
*/
readonly ACTION_TYPE: string = 'router';
/*
* The ability name.
*/
readonly ABILITY_NAME: string = 'EntryAbility';
/*
* The message.
*/
readonly MESSAGE: string = 'add detail - 添加详情?还是干啥用的';
/*
* The width percentage setting.
*/
readonly FULL_WIDTH_PERCENT: string = '100%';
/*
* The height percentage setting.
*/
readonly FULL_HEIGHT_PERCENT: string = '100%';
aboutToAppear(): void {
}
build() {
Row() {
Column() {
Stack() {
Image($r('app.media.widget_together_bg_icon')).width('720lpx').height('720lpx')
if (this.togetherList && this.togetherList.length > 0) {
Column() {
Row() {
Stack() {
Row() {
Image(this.togetherList[0].my_avatar).width('188lpx').height('188lpx')
.backgroundColor(Color.Red)
Image('').width('188lpx').height('188lpx')
.backgroundColor(Color.Red)
}
.width('400lpx')
.height('188lpx')
.justifyContent(FlexAlign.SpaceBetween)
Row() {
Image('').width('119lpx').height('119lpx')
.backgroundColor(Color.Blue)
}
.width('400lpx')
.height('188lpx')
.justifyContent(FlexAlign.Center)
}
.width('400lpx')
.height('188lpx')
.alignContent(Alignment.TopStart)
}
.height('188lpx')
.width('100%')
.justifyContent(FlexAlign.Center)
.margin({
top: '94lpx',
bottom: '24lpx'
})
Row() {
Text('你们在一起的第')
.fontColor('rgba(102, 68, 63, 1)')
.fontSize('66lpx')
}
.height('94lpx')
.width('100%')
.justifyContent(FlexAlign.Center)
.margin({
bottom: '28lpx'
})
Row() {
Text() {
Span('172').fontSize('132lpx').fontColor('rgba(255, 117, 158, 1)')
Span('天').fontSize('56lpx').fontColor('rgba(102, 68, 63, 1)')
}
}
.height('188lpx')
.width('100%')
.justifyContent(FlexAlign.Center)
}
.borderRadius('104lpx')
.height('100%')
.width('100%')
} else {
Column() {
Row() {
Stack() {
Row() {
Image('').width('188lpx').height('188lpx')
.backgroundColor(Color.Red)
Image('').width('188lpx').height('188lpx')
.backgroundColor(Color.Red)
}
.width('400lpx')
.height('188lpx')
.justifyContent(FlexAlign.SpaceBetween)
Row() {
Image('').width('119lpx').height('119lpx')
.backgroundColor(Color.Blue)
}
.width('400lpx')
.height('188lpx')
.justifyContent(FlexAlign.Center)
}
.width('400lpx')
.height('188lpx')
.alignContent(Alignment.TopStart)
}
.height('188lpx')
.width('100%')
.justifyContent(FlexAlign.Center)
.margin({
top: '94lpx',
bottom: '24lpx'
})
Row() {
Text('你们在一起的第')
.fontColor('rgba(102, 68, 63, 1)')
.fontSize('66lpx')
}
.height('94lpx')
.width('100%')
.justifyContent(FlexAlign.Center)
.margin({
bottom: '28lpx'
})
Row() {
Text() {
Span('172').fontSize('132lpx').fontColor('rgba(255, 117, 158, 1)')
Span('天').fontSize('56lpx').fontColor('rgba(102, 68, 63, 1)')
}
}
.height('188lpx')
.width('100%')
.justifyContent(FlexAlign.Center)
}
.borderRadius('104lpx')
.height('100%')
.width('100%')
}
}
.borderRadius('104lpx')
.backgroundColor(Color.White)
.height('100%')
.width('100%')
}
.width(this.FULL_WIDTH_PERCENT)
}
.height(this.FULL_HEIGHT_PERCENT)
.onClick(() => {
postCardAction(this, {
action: this.ACTION_TYPE,
abilityName: this.ABILITY_NAME,
params: {
message: this.MESSAGE
}
});
})
}
}
class CardInfo {
cp_days?: string;
my_avatar?: string;
cp_avatar?: string;
ring?: string;
}
是不是主要是通过下面的代码方式来接收数据的
let togetherStorage = new LocalStorage();
[@Entry](/user/Entry)(togetherStorage)
[@LocalStorageProp](/user/LocalStorageProp)('togetherList') togetherList: CardInfo[] = [];
更多关于HarmonyOS 鸿蒙Next 卡片服务组件如何传递数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙)系统中,Next 卡片服务组件传递数据主要通过以下几种方式实现:
-
Intent传递:卡片服务组件可以通过Intent携带数据进行传递。在创建Intent时,可以将需要传递的数据作为Extra附加到Intent中,然后在目标组件中通过getIntent()方法获取Intent,并解析出数据。
-
全局变量或单例模式:对于需要在多个组件间共享的数据,可以考虑使用全局变量或单例模式。这种方式适用于数据量不大且变化不频繁的场景。
-
数据仓库(Data Store):鸿蒙系统提供了数据仓库机制,允许不同组件安全地存储和访问共享数据。通过数据仓库,组件可以方便地实现数据的读写和监听数据变化。
-
跨组件通信机制(如IPC):对于更复杂的数据传递需求,鸿蒙系统支持跨组件通信机制,如通过AIDL(Android Interface Definition Language)定义的接口进行通信。不过,在卡片服务组件中,通常更倾向于使用上述更轻量级的方式。
请注意,具体选择哪种方式取决于数据的性质、传递的复杂度和应用的需求。开发者应根据实际情况选择最合适的数据传递方式。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html,