在卡片頁面中可以通過postCardAction接口觸發(fā)router或call事件拉起UIAbility,然后由UIAbility刷新卡片內(nèi)容,下面是這種刷新方式的簡(jiǎn)單示例。
通過router事件刷新卡片內(nèi)容
- 在卡片頁面通過注冊(cè)Button的onClick點(diǎn)擊事件回調(diào),并在回調(diào)中調(diào)用postCardAction接口觸發(fā)router事件拉起UIAbility。
- let storage = new LocalStorage();
-
- @Entry(storage)
- @Component
- struct WidgetCard {
- @LocalStorageProp('detail') detail: string = 'init';
-
- build() {
- Column() {
- Button('跳轉(zhuǎn)')
- .margin('20%')
- .onClick(() => {
- console.info('postCardAction to EntryAbility');
- postCardAction(this, {
- 'action': 'router',
- 'abilityName': 'EntryAbility', // 只能跳轉(zhuǎn)到當(dāng)前應(yīng)用下的UIAbility
- 'params': {
- 'detail': 'RouterFromCard'
- }
- });
- })
- Text(`${this.detail}`).margin('20%')
- }
- .width('100%')
- .height('100%')
- }
- }
- 在UIAbility的onCreate()或者onNewWant()生命周期中可以通過入?yún)ant獲取卡片的formID和傳遞過來的參數(shù)信息,然后調(diào)用updateForm接口刷新卡片。
- import UIAbility from '@ohos.app.ability.UIAbility';
- import formBindingData from '@ohos.app.form.formBindingData';
- import formProvider from '@ohos.app.form.formProvider';
- import formInfo from '@ohos.app.form.formInfo';
-
- export default class EntryAbility extends UIAbility {
- // 如果UIAbility第一次啟動(dòng),在收到Router事件后會(huì)觸發(fā)onCreate生命周期回調(diào)
- onCreate(want, launchParam) {
- console.info('Want:' + JSON.stringify(want));
- if (want.parameters[formInfo.FormParam.IDENTITY_KEY] !== undefined) {
- let curFormId = want.parameters[formInfo.FormParam.IDENTITY_KEY];
- let message = JSON.parse(want.parameters.params).detail;
- console.info(`UpdateForm formId: ${curFormId}, message: ${message}`);
- let formData = {
- "detail": message + ': onCreate UIAbility.', // 和卡片布局中對(duì)應(yīng)
- };
- let formMsg = formBindingData.createFormBindingData(formData)
- formProvider.updateForm(curFormId, formMsg).then((data) => {
- console.info('updateForm success.' + JSON.stringify(data));
- }).catch((error) => {
- console.error('updateForm failed:' + JSON.stringify(error));
- })
- }
- }
- // 如果UIAbility已在后臺(tái)運(yùn)行,在收到Router事件后會(huì)觸發(fā)onNewWant生命周期回調(diào)
- onNewWant(want, launchParam) {
- console.info('onNewWant Want:' + JSON.stringify(want));
- if (want.parameters[formInfo.FormParam.IDENTITY_KEY] !== undefined) {
- let curFormId = want.parameters[formInfo.FormParam.IDENTITY_KEY];
- let message = JSON.parse(want.parameters.params).detail;
- console.info(`UpdateForm formId: ${curFormId}, message: ${message}`);
- let formData = {
- "detail": message + ': onNewWant UIAbility.', // 和卡片布局中對(duì)應(yīng)
- };
- let formMsg = formBindingData.createFormBindingData(formData)
- formProvider.updateForm(curFormId, formMsg).then((data) => {
- console.info('updateForm success.' + JSON.stringify(data));
- }).catch((error) => {
- console.error('updateForm failed:' + JSON.stringify(error));
- })
- }
- }
-
- ...
- }
通過call事件刷新卡片內(nèi)容
- 在使用postCardAction接口的call事件時(shí),需要在FormExtensionAbility中的onAddForm生命周期回調(diào)中更新formId。
- import formBindingData from '@ohos.app.form.formBindingData';
- import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';
-
- export default class EntryFormAbility extends FormExtensionAbility {
- onAddForm(want) {
- let formId = want.parameters["ohos.extra.param.key.form_identity"];
- let dataObj1 = {
- "formId": formId
- };
- let obj1 = formBindingData.createFormBindingData(dataObj1);
- return obj1;
- }
-
- ...
- };
- 在卡片頁面通過注冊(cè)Button的onClick點(diǎn)擊事件回調(diào),并在回調(diào)中調(diào)用postCardAction接口觸發(fā)call事件拉起UIAbility。
- let storage = new LocalStorage();
-
- @Entry(storage)
- @Component
- struct WidgetCard {
- @LocalStorageProp('detail') detail: string = 'init';
- @LocalStorageProp('formId') formId: string = '0';
-
- build() {
- Column() {
- Button('拉至后臺(tái)')
- .margin('20%')
- .onClick(() => {
- console.info('postCardAction to EntryAbility');
- postCardAction(this, {
- 'action': 'call',
- 'abilityName': 'EntryAbility', // 只能跳轉(zhuǎn)到當(dāng)前應(yīng)用下的UIAbility
- 'params': {
- 'method': 'funA',
- 'formId': this.formId,
- 'detail': 'CallFromCard'
- }
- });
- })
- Text(`${this.detail}`).margin('20%')
- }
- .width('100%')
- .height('100%')
- }
- }
- 在UIAbility的onCreate生命周期中監(jiān)聽call事件所需的方法,然后調(diào)用updateForm接口刷新卡片。
- import UIAbility from '@ohos.app.ability.UIAbility';
- import formBindingData from '@ohos.app.form.formBindingData';
- import formProvider from '@ohos.app.form.formProvider';
- import formInfo from '@ohos.app.form.formInfo';
- const MSG_SEND_METHOD: string = 'funA'
-
- // 在收到call事件后會(huì)觸發(fā)callee監(jiān)聽的方法
- function FunACall(data) {
- // 獲取call事件中傳遞的所有參數(shù)
- let params = JSON.parse(data.readString())
- if (params.formId !== undefined) {
- let curFormId = params.formId;
- let message = params.detail;
- console.info(`UpdateForm formId: ${curFormId}, message: ${message}`);
- let formData = {
- "detail": message
- };
- let formMsg = formBindingData.createFormBindingData(formData)
- formProvider.updateForm(curFormId, formMsg).then((data) => {
- console.info('updateForm success.' + JSON.stringify(data));
- }).catch((error) => {
- console.error('updateForm failed:' + JSON.stringify(error));
- })
- }
- return null;
- }
- export default class EntryAbility extends UIAbility {
- // 如果UIAbility第一次啟動(dòng),call事件后會(huì)觸發(fā)onCreate生命周期回調(diào)
- onCreate(want, launchParam) {
- console.info('Want:' + JSON.stringify(want));
- try {
- // 監(jiān)聽call事件所需的方法
- this.callee.on(MSG_SEND_METHOD, FunACall);
- } catch (error) {
- console.log(`${MSG_SEND_METHOD} register failed with error ${JSON.stringify(error)}`)
- }
- }
- ...
- }