在HarmonyOS鸿蒙Next中Page内使用方法调用方法异常

在HarmonyOS鸿蒙Next中Page内使用方法调用方法异常

您好,我遇到一个奇怪的问题,在一个方法内调用另外一个方法,如果写this.showDialog无法调用,如果写this.showDialog(),则会抛异常:

Error message:is not callable SourceCode: this.shoDialog();

代码如下:

import { CommonButton } from '../components/CommonButton';
import { loadingDialog } from '../components/LoadingDialog';
import promptAction from '@ohos.promptAction'

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  showDialog() {
    promptAction.openCustomDialog({ builder: loadingDialog.bind(this, '测试中.....'), isModal: false })
      .then((dialogId: number) => {
        this.loadingDialogId = dialogId
      })
  }

  onClickBtn() {
    //问题点 
    this.showDialog
  }

  build() {
    Row() {
      CommonButton({ onClickEvent: this.onClickBtn }).height(48).enabled(true).width('100%')
    }.height('100%')
  }

  loadingDialogId: number = 0;
}

更多关于在HarmonyOS鸿蒙Next中Page内使用方法调用方法异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

使用 [@Builder](/user/Builder) 注解,自定义方法

参考链接: [@Builder装饰器:自定义构建函数-UI范式基本语法-学习ArkTS语言-基础入门 - 华为HarmonyOS开发者](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-builder-V5#装饰器使用说明)

参考 demo:

@Entry
@Component
struct Pc1 {
  @State message: string = 'Hello World';
  [@Builder](/user/Builder) showDialog(){
    Text("12345655555555555555555555555555555555")
  }
  [@Builder](/user/Builder)  onClickBtn(){
    this.showDialog()
  }
  build(){
    Row() {
      this.onClickBtn()
    }
  }
}

若不需要UI操作,可以直接用,如:

@Entry
@Component
struct Pc1 {
  showDialog(){
    console.log("11111111111111111111111111111111111")
  }
  onClickBtn(){
    this.showDialog()
  }
  build(){
    Text("TEST")
      .fontSize(50)
      .onClick(()=>{
        this.onClickBtn()
      })
  }
}

实现组件间方法的传递,参考以下 demo:

import { Pc2 } from './Pc2';
@Entry
@Component
struct Pc1 {
  @State status: number = 0;
  showDialog(){
    console.log("===================")
  }
  onClickBtn(){
    this.showDialog()
  }
  build(){
    Row() {
      Pc2({
        onClickEvent:this.onClickBtn.bind(this)
      }).height(48)
        .enabled(true)
        .width('100%')
    }
  }
}
@Component
export struct Pc2 {
  text:ResourceStr = '按钮'
  onClickEvent?:()=>void
  build(){
    Button(this.text, { type: ButtonType.Normal })
      .fontSize(16)
      .height(48)
      .borderRadius(8)
      .onClick(() => {
        if(this.onClickEvent!==undefined){
          this.onClickEvent();
        } else {
          this.onClickEvent
        }
      })
      .stateStyles({
        normal: {
          backgroundColor('#00CE83')
        },
        disabled: {
          backgroundColor(Color.Red)
        }
      })
      .width('100%')
  }
}

更多关于在HarmonyOS鸿蒙Next中Page内使用方法调用方法异常的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,Page内方法调用方法异常可能涉及多个方面。首先,确保方法定义正确,包括参数和返回类型。其次,检查方法调用时是否传入了正确的参数。再者,确认方法的访问权限是否允许在当前上下文中调用。此外,检查是否存在异步操作未正确处理,导致方法调用时序问题。如果使用了ArkUI框架,确保UI组件状态更新与数据绑定正确无误。最后,查看日志输出,定位异常堆栈信息,帮助快速定位问题。如果问题依然存在,建议使用调试工具逐步排查。

在HarmonyOS鸿蒙Next中,Page内方法调用异常可能由以下原因导致:

  1. 未正确绑定上下文:确保方法在正确的上下文环境中调用,可使用@State@Prop进行数据绑定。

  2. 生命周期问题:方法可能在Page未初始化或已销毁时调用,检查生命周期钩子如onPageShowonPageHide

  3. 异步操作未处理:异步操作未正确处理可能导致异常,使用async/awaitPromise确保异步操作完成后再调用方法。

  4. 依赖未注入:确保依赖的服务或组件已正确注入,避免空指针异常。

回到顶部