在HarmonyOS NEXT开发中@Builder的内容如何刷新?

在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) 
  } 
} 
阅读 1k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
HarmonyOS
子站问答
访问
宣传栏