HarmonyOS 构造传参数失败问题

// TabBar.ets
build() {
  Tabs({barPosition:BarPosition.Start}){
    ForEach(this.tabBarArray,(tabsItem:ChannelModel[],index:number) =>{
      TabContent(){
        HomeNewsListView({tabItem:tabsItem[index]}); //构造传参数
      }
      .tabBar(this.TabBuilder(index,index))
      .....................................
// HomeNewsListView.ets
@Component
export struct HomeNewsListView {
  private refresh_type: string = "1" //1下拉刷新 2上拉加载
  private refresh_count: number = 1 //第几页数据
  controller: RefreshController = new RefreshController() //刷新控制器
  dataSource: RefreshDataSource = new RefreshDataSource()

  @Require @Prop tabItem:ChannelModel; //参数

  aboutToAppear() {
    this.loadData()
  }
  .......................
  loadData() {
    this.refresh_type = "1"
    this.refresh_count = 1
    //使用
    newsDataViewModel.getNewsList(this.tabItem.cid, this.tabItem.cname, '1', '0', this.refresh_type,
      this.refresh_count.toString(), '', '', '1', '1', '',
      '').then((data: InfoStreamDataList<RefactorNewsItemModel>) => {
      this.controller.finishRefresh()
      ..........................................

1、参数传递失败如何修改。

2、参数传递的方式共有几种方法?

HarmonyOS
2025-01-09 13:37:45
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

ArkUI提供了多种装饰器,通过使用这些装饰器,状态变量不仅可以观察在组件内的改变,还可以在不同组件层级间传递,比如父子组件、跨组件层级,也可以观察全局范围内的变化,可以参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-state-management-V5

@Reusable
@Component
struct Gizmos {
  private str: string = ''
  private reuseChain: string = ''
  @State textStr: string = `build ${this.str}`
  @ObjectLink person: Person

  aboutToAppear() {
    this.textStr = `build ${this.str}`
    this.reuseChain = `${this.str}`
  }

  aboutToReuse(param: ESObject) {
    let preStr: string = this.str;
    this.str = param.str
    this.reuseChain = `${this.reuseChain}->${this.str}`
    this.textStr = `reuse ${preStr} as ${this.str}, reuseChain ${this.reuseChain}`
  }

  build() {
    Column() {
      Text(this.textStr)
      Text(this.person.name)
    }
    .width('100%')
    .height(160)
    .backgroundColor(Color.Green)
  }
}

class BasicDataSource implements IDataSource {
  private listeners: DataChangeListener[] = [];

  public totalCount(): number {
    return 0;
  }

  public getData(index: number): string {
    return '';
  }

  registerDataChangeListener(listener: DataChangeListener): void {
    if (this.listeners.indexOf(listener) < 0) {
      console.info('add listener');
      this.listeners.push(listener);
    }
  }

  unregisterDataChangeListener(listener: DataChangeListener): void {
    const pos = this.listeners.indexOf(listener);
    if (pos >= 0) {
      console.info('remove listener');
      this.listeners.splice(pos, 1);
    }
  }

  notifyDataReload(): void {
    this.listeners.forEach(listener => {
      listener.onDataReloaded();
    })
  }

  notifyDataAdd(index: number): void {
    this.listeners.forEach(listener => {
      listener.onDataAdd(index);
    })
  }

  notifyDataChange(index: number): void {
    this.listeners.forEach(listener => {
      listener.onDataChange(index);
    })
  }

  notifyDataDelete(index: number): void {
    this.listeners.forEach(listener => {
      listener.onDataDelete(index);
    })
  }

  notifyDataMove(from: number, to: number): void {
    this.listeners.forEach(listener => {
      listener.onDataMove(from, to);
    })
  }
}

class MyDataSource2 extends BasicDataSource {
  private dataArray: string[] = [];

  public totalCount(): number {
    return this.dataArray.length;
  }

  public getData(index: number): string {
    return this.dataArray[index];
  }

  public addData(index: number, data: string): void {
    this.dataArray.splice(index, 0, data);
    this.notifyDataAdd(index);
  }

  public pushData(data: string): void {
    this.dataArray.push(data);
    this.notifyDataAdd(this.dataArray.length - 1);
  }

  public deleteData(index: number): void {
    this.dataArray.splice(index, 1);
    this.notifyDataDelete(index);
  }
}

@Entry
@Component
struct ReusableDemo {
  data: MyDataSource2 = new MyDataSource2();
  @State flags: boolean[] = []
  @State persons: Person = new Person()

  aboutToAppear() {
    for (let i = 1; i < 21; i++) {
      this.data.pushData(`${i}`)
      if (i % 3 == 0) {
        this.flags.push(true)
      } else {
        this.flags.push(false)
      }
    }
  }

  build() {
    Grid() {
      LazyForEach(this.data, (item: string, index) => {
        GridItem() {
          Column() {
            Button('switch')
              .onClick(() => {
                this.flags[index] = !this.flags[index];
                this.persons.name = '枫叶';
              })
            if (this.flags[index]) {
              Gizmos({ str: this.data.getData(index), person: this.persons })
            }
          }
          .height(200)
        }
        .borderColor(Color.Black)
        .borderWidth(3)
      }, (item: string) => item)
    }
    .columnsTemplate('1fr 1fr')
  }
}

@Observed
class Person {
  name: string = '栗子';
  age: number = 500;

  public onchang() {
    console.log(':::onchang');
  }
}
分享
微博
QQ
微信
回复
2025-01-09 17:09:45
相关问题
HarmonyOS 参数问题
478浏览 • 1回复 待解决
HarmonyOS关于AXIOS动态参数问题
963浏览 • 1回复 待解决
HarmonyOS Web runJavaScript 如何参数
368浏览 • 1回复 待解决
从ArkTs向Native复杂参数---List参数
1361浏览 • 1回复 待解决
HarmonyOS @build组件参数据没有刷新
350浏览 • 1回复 待解决
HarmonyOS 路由页面接收回参数方式
1642浏览 • 1回复 待解决
xargs命令中多个参数实例?
9908浏览 • 1回复 待解决
HarmonyOS 页面问题
780浏览 • 1回复 待解决
HarmonyOS 本地html问题
860浏览 • 1回复 待解决
HarmonyOS 父子组件问题
298浏览 • 1回复 待解决
HarmonyOS Component问题
306浏览 • 2回复 待解决
HarmonyOS Navigation问题
405浏览 • 1回复 待解决
HarmonyOS HTTP使用Map问题
489浏览 • 1回复 待解决