HarmonyOS @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)
  }
}

HarmonyOS
2024-12-18 17:13:49
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

@ObservedV2 需要 new 出来,不能直接赋值。

分享
微博
QQ
微信
回复
2024-12-18 18:52:50
相关问题
HarmonyOS @builder方法ui不刷新
606浏览 • 1回复 待解决
HarmonyOS @Builder UI刷新问题
382浏览 • 1回复 待解决
HarmonyOS TabContent内容如何手动刷新
306浏览 • 1回复 待解决
HarmonyOS 如何刷新页面内容
270浏览 • 1回复 待解决
HarmonyOS builder 作为 builder 参数传递
373浏览 • 1回复 待解决
HarmonyOS 如何使用全局Builder
237浏览 • 1回复 待解决
HarmonyOS 想在builder中插入builder
294浏览 • 1回复 待解决