• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 通过message事件刷新卡片内容
2
3在卡片页面中可以通过**postCardAction**接口触发message事件拉起FormExtensionAbility,然后由FormExtensionAbility刷新卡片内容,下面是这种刷新方式的简单示例。
4
5> **说明:**
6>
7> 本文主要介绍动态卡片的事件开发。对于静态卡片,请参见[FormLink](../reference/arkui-ts/ts-container-formlink.md)。
8
9- 在卡片页面通过注册Button的onClick点击事件回调,并在回调中调用**postCardAction**接口触发message事件拉起FormExtensionAbility。卡片页面中使用[LocalStorageProp](../quick-start/arkts-localstorage.md#localstorageprop)装饰需要刷新的卡片数据。
10
11  ```ts
12  let storage = new LocalStorage();
13  @Entry(storage)
14  @Component
15  struct WidgetCard {
16    @LocalStorageProp('title') title: string = 'Title default';
17    @LocalStorageProp('detail') detail: string = 'Description default';
18
19    build() {
20      Column() {
21        Column() {
22          Text(`${this.title}`)
23            .margin(5).fontWeight(FontWeight.Medium).fontSize('14fp')
24          Text(`${this.detail}`)
25            .margin(5).fontColor(Color.Gray).fontSize('12fp').height('25%')
26        }.width('100%').alignItems(HorizontalAlign.Start)
27        Button('UPDATE')
28          .margin(15).width('90%')
29          .onClick(() => {
30            postCardAction(this, {
31              action: 'message',
32              params: {
33                msgTest: 'messageEvent'
34              }
35            });
36          })
37      }.width('90%').height('90%').margin('5%')
38    }
39  }
40  ```
41
42- 在FormExtensionAbility的onFormEvent生命周期中调用[updateForm](../reference/apis/js-apis-app-form-formProvider.md#updateform)接口刷新卡片。
43
44  ```ts
45  import formBindingData from '@ohos.app.form.formBindingData';
46  import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';
47  import formProvider from '@ohos.app.form.formProvider';
48
49  export default class EntryFormAbility extends FormExtensionAbility {
50    onFormEvent(formId: string, message: string) {
51      // Called when a specified message event defined by the form provider is triggered.
52      console.info(`FormAbility onFormEvent, formId = ${formId}, message: ${JSON.stringify(message)}`);
53      class FormDataClass{
54        title: string = 'Title Update.' // 和卡片布局中对应
55        detail: string = 'Description update success.' // 和卡片布局中对应
56      }
57      let formData = new FormDataClass();
58      let formInfo: formBindingData.FormBindingData = formBindingData.createFormBindingData(formData);
59      formProvider.updateForm(formId, formInfo).then(() => {
60        console.info('FormAbility updateForm success.');
61      });
62    }
63    ...
64  }
65  ```
66
67  运行效果如下图所示。
68
69  | 初始状态                                                | 点击刷新                                              |
70  | ------------------------------------------------------- | ----------------------------------------------------- |
71  | ![WidgetUpdateBefore](figures/widget-update-before.PNG) | ![WidgetUpdateAfter](figures/widget-update-after.PNG) |
72