HarmonyOS 鸿蒙Next 卡片服务组件如何传递数据

发布于 1周前 作者 ionicwang 来自 鸿蒙OS

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

2 回复

展示网络图片需要module.json5配置文件中配置ohos.permission.INTERNET权限,具体使用参考下文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-ui-widget-image-update-V5

更多关于HarmonyOS 鸿蒙Next 卡片服务组件如何传递数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,Next 卡片服务组件传递数据主要通过以下几种方式实现:

  1. Intent传递:卡片服务组件可以通过Intent携带数据进行传递。在创建Intent时,可以将需要传递的数据作为Extra附加到Intent中,然后在目标组件中通过getIntent()方法获取Intent,并解析出数据。

  2. 全局变量或单例模式:对于需要在多个组件间共享的数据,可以考虑使用全局变量或单例模式。这种方式适用于数据量不大且变化不频繁的场景。

  3. 数据仓库(Data Store):鸿蒙系统提供了数据仓库机制,允许不同组件安全地存储和访问共享数据。通过数据仓库,组件可以方便地实现数据的读写和监听数据变化。

  4. 跨组件通信机制(如IPC):对于更复杂的数据传递需求,鸿蒙系统支持跨组件通信机制,如通过AIDL(Android Interface Definition Language)定义的接口进行通信。不过,在卡片服务组件中,通常更倾向于使用上述更轻量级的方式。

请注意,具体选择哪种方式取决于数据的性质、传递的复杂度和应用的需求。开发者应根据实际情况选择最合适的数据传递方式。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html,

回到顶部