HarmonyOS 页面动态配置

现有一个需求,要求我们在App启动时,通过网络接口下发配置,通过响应中的数据,去配置底部Tab展示不同的模块内容,比如响应为

{
  "code":200,
"message":"success",
"data":[
  {
    "url":"pageA",
  "icon":xxx.png,
  "iconSelected":xxx.png
  },
  { "url":"pageB",
  "icon":xxx.png,
  "iconSelected":xxx.png

  }
  ]
}

现需要通过该请求,去展示不同的底部Tab,有什么实现方案吗

现在已经有启动页,Tab主页面是确定的,但是Tab主页面中的子component是需要动态配置的,这种需要怎么做

HarmonyOS
2024-12-25 08:45:15
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
shlp

可以使wrapBuilder来封装@Builder。

参考demo:

// DataModel.ets
// 定义一个空的builder
@Builder
function defaultBuilder(): void {}

// 定义一个class,有对应的WrappedBuilder
export class DataModel {
  id: string = ''
  value: string = ''
  otherProp: string = ''
  builderWrap: WrappedBuilder<[string]> = wrapBuilder(defaultBuilder)

  constructor(id: string, value: string, builderWrap: WrappedBuilder<[string]>) {
    this.id = id
    this.value = value
    this.builderWrap = builderWrap
  }
}

// 模拟请求,创建返回对象
@Builder
function CustomBuilder(param: string) {
  Column() {
    Text(param)
      .fontSize(50)
      .fontWeight(FontWeight.Bold)
  }.height(50)
}

let customPageWrappedBuilder: WrappedBuilder<[string]> = wrapBuilder(CustomBuilder);

export function getData(): Promise<DataModel[]> {
  let arr: DataModel[] = [new DataModel('1', 'test1', customPageWrappedBuilder), new DataModel('2', 'test2', customPageWrappedBuilder)]
  return new Promise((resolve) => {
    resolve(arr)
  })
}

// 页面使用
// TestPage.ets
import { DataModel, getData } from './DataModel'
@Entry
@Component
struct TestPage {
  testData: DataModel[] = []

  async aboutToAppear() {
    this.testData = await getData()
  }
  build() {
    Column() {
      ForEach(this.testData, (item: DataModel) => {
        item.builderWrap.builder(item.value)
      })
    }
  }
}

全局@Builder作为wrapBuilder的参数返回WrappedBuilder对象,实现全局@Builder可以进行赋值和传递。

文档地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-wrapbuilder-V5

分享
微博
QQ
微信
回复
2024-12-25 10:29:08
相关问题
HarmonyOS 动态隐藏页面元素
301浏览 • 1回复 待解决
HarmonyOS Navigation动态跳转页面问题
298浏览 • 1回复 待解决
HarmonyOS 如何动态获取当前页面
1184浏览 • 1回复 待解决
HarmonyOS 哪里配置闪屏页面
300浏览 • 1回复 待解决
如何通过JS动态引入页面?
2813浏览 • 1回复 待解决
启动页面配置问题有哪些?
800浏览 • 1回复 待解决
路由实现动态页面的跳转方案
2111浏览 • 1回复 待解决