当前位置: 首页 > article >正文

HarmonyOS鸿蒙开发 BuilderParam在父组件的Builder的点击事件报错:Error message:is not callable

HarmonyOS鸿蒙开发 BuilderParam在父组件的Builder的点击事件报错:Error message:is not callable

最近在鸿蒙开发过程中,UI做好了,根据列表item进行点击跳转,报错了
报错信息如下

Error message:is not callable
Stacktrace:
    at anonymous (entry/src/main/ets/pages/demolab/BuilderDemoPage.ets:42:7)

一、报错的代码示例

首先我创建了一个BuilderDemoPage,里面需要Column,Column中有一个List
代码如下


@ComponentV2
export struct BuilderDemoPage {
  @Local message: string = 'Hello World';
  @Consumer('pageInfos') pageInfos: NavPathStack = new NavPathStack()
  @Param dataList: string[] = [];

  aboutToAppear(): void {
    for (let index = 0; index < 50; index++) {
      this.dataList.push('第' + index.toString() + '行');
    }
  }

  aboutToDisappear(): void {
  }

  onNavBackClick(): void {
  }

  onListItemClick(item: string): void {
  }

  @Builder
  ListItemBuilder(index: number) {
    Column() {
      Text(this.dataList[index])
        .fontSize(25)
        .fontWeight(FontWeight.Bold)
    }
    .width('100%')
    .height(50)
    .onClick(() => {
      this.onListItemClick(this.dataList[index])
    })
  }

  build() {
    NavDestination() {
      Column() {
        BuilderListView({
          dataList: this.dataList,
          listItem: this.ListItemBuilder,
        })
      }
      .width('100%')
      .height('100%')
    }
    .title("BuilderDemoPage")
    .hideTitleBar(false)
    .onBackPressed(() => {
      const popDestinationInfo = this.pageInfos.pop() // 弹出路由栈栈顶元素
      console.log('pop' + '返回值' + JSON.stringify(popDestinationInfo))
      return true
    })
    .width('100%')
    .height('100%')
  }
}

列表BuilderListView,通过传入listItem和dataList
BuilderListView代码如下

@ComponentV2
export struct BuilderListView {
  @BuilderParam listItem: (index: number) => void;
  @Param dataList: string[] = [];

  aboutToAppear(): void {
  }

  aboutToDisappear(): void {
  }

  build() {
    Column() {
      List() {
        ForEach(this.dataList, (item: string, index: number) => {
          ListItem() {
            this.listItem(index);
          }
        })
      }
    }
    .width('100%')
    .height('100%')
  }
}

当点击列表时候,会出现
Error message:is not callable

二、修改报错

问题分析,在JS中,this指向有问题,当以listItem: this.ListItemBuilder, 传入的时候;ListItemBuilder中的this指向的是子类,子类中并无onListItemClick方法,出现Error message:is not callable错误。

我迷需要修改,将listItem: this.ListItemBuilder修改成如下

 listItem: (index)=>{
            this.ListItemBuilder(index);
          },

完整解析

在js中调用this时需要注意this的指向。当前代码在子组件中声明builder方法时,this指向的是父组件,而@Builder ListItemBuilder()通过this.ListItemBuilder的形式传给子组件@BuilderParam listItem,this指向在Child的label,即“Child”,所以在点击事件响应的时候,this是指向Child而Child中没有onListItemClick()所以出现jscrash。

参考官方网址
https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-arkui-229-V5

三、小结

我在开发中遇到在js中调用this时需要注意this的指向导致报错,做一下记录,这里是学习HarmonyOS鸿蒙开发的学习记录,如果对你有用,你可以点个赞哦~~。详细的文档还是以官方文档为主。

原文地址:https://blog.csdn.net/gloryFlow/article/details/146414263
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/595711.html

相关文章:

  • 【时时三省】(C语言基础)习题2 scanf函数
  • Pytorch使用手册—自定义 C++ 和 CUDA 运算符(专题五十一)
  • 用AI优化云平台上的企业客服通话满意度和工单解决效率(上)
  • docker compose启动ollama+openweb ui,本地大模型十分钟搭建,速度主要取决于网速
  • windows 平台编译openssl
  • 击退手抖困扰:全面解析健康护理指南
  • 小程序API —— 52 小程序界面交互 - 模态对话框 - 消息对话框
  • Windows 图形显示驱动开发-WDDM 2.9功能- 支持跨适配器资源扫描 (CASO)(二)
  • 基于FPGA频率、幅度、相位可调的任意函数发生器(DDS)实现
  • hexo+butterfly博客功能完善和美化(三)---评论功能载入
  • C#Dictionary值拷贝还是引用
  • IDEA导入jar包后提示无法解析jar包中的类,比如无法解析符号 ‘log4j‘
  • 流式语音识别概述-paddlespeech
  • Solana Anchor 程序接口定义语言(IDL)
  • 【回归算法解析系列09】梯度提升回归树(GBRT, XGBoost, LightGBM)
  • Metasploit 跳板攻击
  • StarRocks 升级注意事项
  • django怎么配置404和500
  • VLAN综合实验报告
  • 【 Kubernetes 风云录 】- MutatingWebhook 实现自动注入