HarmonyOS 鸿蒙Next调用自定义组件类中的方法报TypeError: is not callable

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next调用自定义组件类中的方法报TypeError: is not callable

两个组件都是自定义,在"Head.ets"组件中导入另外一个自定义组件“DrawerLayout.ets”,并通过@Prop装饰器定义了一个model参数,其类型为DrawerLayout.ets组件中的Model类,然后在Head.ets组件中通过点击调用Model类中的方法,报错TypeError: is not callable,在SDK-API9更新之前可以使用,更新之后就报错,不知道是SDK出现的BUG还是什么原因,附图如下

1.png

2.png

5 回复
问题出在DrawerLayout文件中的Model里,是类型不对,贴出Model的代码才好分析。

Model 就是DrawerLayout.ets中的一个普通类 , 因为代码太多不好截图,大概格式如下 export namespace DrawerLayout { … … … // 此处省略一些变量和方法的定义 export class Model { this.animateDrawer(() => { switch (this.drawerType) { case Type.LEFT: this.drawerPositionX = this.drawerPositionX === 0 ? this.drawerWidth * -1 : 0; this.isDrawerOpen = this.drawerPositionX === 0 break; case Type.RIGHT: this.drawerPositionX = this.drawerPositionX === this.drawerOffsetWidth ? this.displayWidth : this.drawerOffsetWidth; this.isDrawerOpen = this.drawerPositionX === this.drawerOffsetWidth break; } if (this.drawerStateCallback) { this.drawerStateCallback(this.drawerType, this.isDrawerOpen); } // 动画结束 this.isDrawerViewVisible = this.isDrawerOpen; }); }

}

就是上面的格式,

出错的是this.model.openOrCloseDrawer(),错误指示是说 openOrCloseDrawer() 不可调用,this.model 是 DrawerLayout.Model类型,openOrCloseDrawer()是不是在Model内声明的?现在没法关联起来,这几者的关联能说明一下吗?

截图已经很明显了啊,DrawerLayout自定义组件中定义了Model类,openOrCloseDrawer是Model类中的方法,而Head.ets导入了DrawerLayout,相当于是它的父组件。

在HarmonyOS鸿蒙开发环境中,遇到调用自定义组件类中的方法时报TypeError: is not callable,通常是由于以下几种原因:

  1. 方法未正确定义:检查你的自定义组件类中,该方法是否已被声明为public或具有合适的访问修饰符,且确保方法名拼写正确。

  2. 实例问题:确认你是在类的实例上调用方法,而非类本身。如果是类方法(静态方法),需使用@staticmethod装饰器,并通过类名直接调用。

  3. 参数问题:检查调用方法时传递的参数是否与定义匹配,包括数量、类型和顺序。

  4. 编译与运行环境问题:有时IDE或编译器的缓存问题可能导致此类错误,尝试清理项目并重新构建。

  5. 继承与重载:如果该类是从其他类继承而来,检查父类中是否有同名方法被错误地遮蔽或未正确重载。

请逐一排查上述可能原因。确保所有代码均符合HarmonyOS的开发规范,并且环境配置正确无误。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部