HarmonyOS 鸿蒙Next中添加卡片时需要对卡片进行数据初始化
HarmonyOS 鸿蒙Next中添加卡片时需要对卡片进行数据初始化 添加卡片时需要对卡片进行数据初始化,这个有指导吗?
5 回复
卡片数据初始化可以参考 卡片更新与数据交互-服务卡片
卡片创建及卡片配置参考 ArkTS卡片开发指导
更多关于HarmonyOS 鸿蒙Next中添加卡片时需要对卡片进行数据初始化的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
【问题背景】:如何在添加卡片的时候,对卡片数据进行初始化?
【解决思路】:
1、全局卡片数据监听处理
在EntryFormAbility.ets中,实现FormExtensionAbility生命周期接口,其中在**onAddForm**的入参want中可以通过FormParam取出卡片的相关信息。
onAddForm(want: Want): formBindingData.FormBindingData {
// 卡片使用方创建卡片时触发
const formId: string = want.parameters[formInfo.FormParam.IDENTITY_KEY] as string; //卡片ID
const formName: string = want.parameters[formInfo.FormParam.NAME_KEY] as string; //卡片名称
let obj: Record<string, string> = {
'title': 'titleOnAddForm',
'detail': 'detailOnAddForm'
};
//数据绑定
let formData: formBindingData.FormBindingData = formBindingData.createFormBindingData(obj);
return formData;
}
2、单一卡片数据监听处理
在组件的aboutToAppear()处理即可
@Entry
@Component
struct CardTest {
aboutToAppear(): void {
}
}
兄弟,卡片初始化主要通过FormExtensionAbility的onAddForm()生命周期接口实现。
你可以看看下面的核心流程和代码示例:
1. 卡片初始化流程
- 数据绑定:在
onAddForm()中创建卡片数据对象,使用formBindingData.createFormBindingData()封装数据。 - 异步处理:若需依赖异步数据(如网络请求),可先用空数据初始化卡片,再通过
formProvider.updateForm()更新。
2. 代码示例
import { formBindingData, FormExtensionAbility, formInfo } from '@kit.FormKit';
import { Want } from '@kit.AbilityKit';
import { systemDateTime } from '@kit.BasicServicesKit';
import { FormData } from '../common/CommonData'; // 自定义数据类
export default class EntryFormAbility extends FormExtensionAbility {
onAddForm(want: Want): formBindingData.FormBindingData {
// 1. 校验参数
if (!want?.parameters) {
return formBindingData.createFormBindingData('');
}
// 2. 获取卡片标识
const formId: string = want.parameters[formInfo.FormParam.IDENTITY_KEY] as string;
const formName: string = want.parameters[formInfo.FormParam.NAME_KEY] as string;
// 3. 构建初始数据
if (formName === 'card_info_refresh') {
const formData = new FormData(formId);
formData.formTime = systemDateTime.getTime().toString(); // 设置初始时间
return formBindingData.createFormBindingData(formData); // 返回绑定数据
}
return formBindingData.createFormBindingData('');
}
}
3. 关键说明
- 数据类定义:需自定义
FormData类(示例中为CardListItemData结构),包含卡片所需字段(如formId、formTime)。 - 异步场景:若初始化依赖数据库/网络,按以下步骤操作:
// 步骤1:先返回空数据
onAddForm(want: Want) {
return formBindingData.createFormBindingData('');
}
// 步骤2:获取数据后更新卡片
import { formProvider } from '@kit.FormKit';
async fetchDataAndUpdate(formId: string) {
const asyncData = await getNetworkData();
formProvider.updateForm(formId, formBindingData.createFormBindingData(asyncData));
}
4. 注意事项
- 参数校验:必须检查
want.parameters是否存在,避免空指针异常。 - 命名规范:使用
formInfo.FormParam中的常量键(如IDENTITY_KEY、NAME_KEY)获取参数。
在HarmonyOS Next中添加卡片时,数据初始化需在EntryFormAbility的onAddForm回调中完成。通过formBindingData.createFormBindingData方法创建数据对象,使用formProvider.setFormNext刷新数据至卡片。初始化数据可来源于本地存储或异步请求,需确保在卡片首次加载时完成数据绑定。


