鸿蒙 Navigation组件下的组件获取pageStack问题

他的猫哎 2024-12-24 17:43:01

前情提要
最近学了下鸿蒙开发,刚入坑,问题不少,记录一下。
# 问题描述
在Navigation下的HomePage组件,通过Provide、Consume获取pageStack

在HomePage组件中 @Builder 定义的WaterItem 下的点击事件获取this.pageStack为undefined

```typescript
// 主入口文件
@Entry
@Component
struct IndexPage {
  @Provide('pageStack') pageStack: NavPathStack = new NavPathStack()

  build() {
      Navigation(this.pageStack) {
          HomePage()
      }
      .width('100%').height('100%').backgroundColor('#FFFFFF')
      .hideTitleBar(true)
      .hideToolBar(false)
  }
}
```


HomePage组件代码

```typescript
// HomePage 组件
@Component
struct HomePage {
  @Consume('pageStack') pageStack:NavPathStack;

  abc: number = 1;

  dataSource: WaterFlowDataSource = new WaterFlowDataSource();

  @Builder
  WaterItem(item: TGridItem) {
    Column(){
        Button('跳转')
          .width('70vp')
          .height('30vp')
          .backgroundColor('#000000')
          .fontColor('green')
          .onClick(()=> {
              this.pageStack.pushPathByName('Detail', null)
          })
    }
  }

  build() {
     Column(){
       WaterflowList({
         gridData: this.dataSource,
         waterflowItemParam: this.WaterItem
       })
         .width('100%')
         .height('100%')
     }
    .width('100%')
    .height('100%')
  }
}
```

这里this.pageStack是undefined会直接导致闪退,this.abc是可以直接获取到值的。

# 解决方案: 
这里换成这个写法,就可以了。

```typescript
waterflowItemParam: item => { this.WaterItem(item) }
```

原因不太清楚,this 指向问题?但是为什么能访问到abc?


 

...全文
114 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

5,312

社区成员

发帖
与我相关
我的任务
社区描述
HarmonyOS是一款“面向未来”、面向全场景的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持多种终端设备。
分布式学习 企业社区
社区管理员
  • HarmonyOS技术社区
  • Edice
  • BaoWei
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧