在HarmonyOS NEXT开发中@Builder的内容如何刷新?
/**
标题栏在线状态区域内容
*/
@ObservedV2
export class AIOTitleOnlineStatusItem {
builder: WrappedBuilder<[AIOTitleOnlineStatusItem]> | undefined = undefined;
@Trace title: string = ‘’;
@Trace subTitle: string = ‘’;
}
/**
标题栏更新的数据实体
*/
@ObservedV2
export class AIOTitleModel {
@Trace title: string = ‘’;
@Trace unreadCnt: number = 0;
@Trace memberCnt: number = 0;
@Trace onlineStatusItem: AIOTitleOnlineStatusItem | undefined = undefined;
}
const TAG = ‘TroopAIOTitleComponent’;
@Extend(Text) function navigationTextStyle() {
.lineHeight(24)
.fontColor(Color.Black)
.fontSize(17)
.textAlign(TextAlign.Start)
.fontWeight(500)
.textOverflow({ overflow: TextOverflow.Ellipsis })
.maxLines(1)
}
@Builder
export function getOnlineStatusBuilder(statusItem: AIOTitleOnlineStatusItem) {
Row() {
Text(statusItem.title).lineHeight(16)
.fontSize(12)
Text(statusItem.subTitle).lineHeight(16)
.fontSize(12)
}.width(‘100%’)
.align(Alignment.Start)
.height(20)
}
const model: AIOTitleModel = new AIOTitleModel();
@Entry
@Component
export struct Test {
aboutToAppear(): void {
model.title = ‘测试标题’;
model.unreadCnt = 25;
}
build() {
Column() {
TitleComponent()
Button(‘点击变更title内容’).onClick(() => {
if (model.onlineStatusItem != undefined) {
model.onlineStatusItem.title += ‘11’;
model.onlineStatusItem.builder = wrapBuilder(getOnlineStatusBuilder)
// model.onlineStatusItem.builder = wrapBuilder(getOnlineStatusBuilder({ paramsItem: this.onlineStatusItem }))
} else {
model.onlineStatusItem = {
builder: wrapBuilder(getOnlineStatusBuilder),
// builder: wrapBuilder(getOnlineStatusBuilder({ paramsItem: this.onlineStatusItem })),
title: ‘当前在线’,
subTitle: ‘-test’
};
}
}).margin({
top: 20
})
}.alignItems(HorizontalAlign.Center)
}
}
@Component
export struct TitleComponent {
build() {
// 内容区域
Flex({ wrap: FlexWrap.Wrap, justifyContent: FlexAlign.Start, alignContent: FlexAlign.SpaceEvenly }) {
// 昵称
Text() {
// 左边的小耳朵
Span(“TitleComponent”)
// 标题
Span(model.title)
// 右边的小耳朵
// 群成员数量
Span((${model.memberCnt}))
}.navigationTextStyle()
.alignSelf(ItemAlign.Start)
.width('60%')
.backgroundColor(Color.Pink)
// 在线状态
if (model.onlineStatusItem != undefined) {
model.onlineStatusItem.builder?.builder(model.onlineStatusItem)
}
}.height(44)
.alignSelf(ItemAlign.Center)
.backgroundColor(Color.Yellow)
}
}
@ObservedV2 需要 new 出来,不能直接赋值。