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

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
HarmonyOS
2024-12-18 17:13:49
598浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
Heiang

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

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