AbnerMing888 / HarmonyOsRefresh

HarmonyOsRefresh是一个鸿蒙版的刷新组件,超简单使用,支持下拉刷新和上拉加载,支持各种组件,List、Grid、Column、Row……
Apache License 2.0
180 stars 22 forks source link

自定义刷新头组件,拿不到 staus 变量 #208

Closed JosephusZhou closed 2 weeks ago

JosephusZhou commented 2 weeks ago
build() {
    RefreshLayout({
      controller: this.refreshController,
      itemLayout: () => this.contentLayout(),
      headerRefreshLayout: this.refreshHeaderLayout,
      refreshHeaderAttribute: (attribute: RefreshHeaderAttr) => {
        attribute.height = 80 + this.statusBarHeight
      },
      onRefresh: () => {
        setTimeout(() => {
          this.refreshController.finishRefresh()
        }, 3000)
      }
    })
  }

  @Builder
  refreshHeaderLayout(model: RefreshLayoutStatusModel) {
    // 自定义刷新头组件,拿不到 status
    // RefreshHeader({text: model.status ?  "状态:" + model.status : "拿不到变量"})
    // 直接 text 组件,可以拿到 status
    Text(model.status ? "状态:" + model.status : "拿不到变量")
      .margin({
        top: this.statusBarHeight
      })
  }
JosephusZhou commented 2 weeks ago

在本项目示例代码的基础上去尝试自定义刷新头组件,也不成功。

在 ListRefreshHeaderFooterPage.ets 文件中修改

@Builder
  headerRefreshLayout(model: RefreshLayoutStatusModel) {
    /*Text("当前状态:" + model.status)
      .width("100%")
      .textAlign(TextAlign.Center)
      .height(80)
      .backgroundColor(Color.Pink)*/
    // 自定义组件
    RefreshHeader({
      text: "当前状态:" + model.status
    })
  }

增加 RefreshHeader.ets 文件

@Preview
@Component
export default struct RefreshHeader {

  text: string = ""

  build() {
    Row() {
      Text(this.text)
        .fontColor(Color.Blue)
        .fontSize(14)
    }
    .alignItems(VerticalAlign.Center)
    .justifyContent(FlexAlign.Center)
    .backgroundColor(Color.Pink)
    .width('100%')
    .height(80)
  }
}
AbnerMing888 commented 2 weeks ago

状态肯定能拿到的,建议先看Demo中的实现方式

JosephusZhou commented 2 weeks ago

确认了,是自定义组件没有写状态装饰器的问题,我的问题。

@Prop text: string = ""