我在自定义组件的模板HTML内使用:

<foo ... (click)="doSth(foo)" ...></foo>


然后,在控制器中,我正在调用属于此特定对象的类的函数

class Foo {
      ...

      getWhatever(){
          ...
      }
}




doSth(foo: Foo) {
     foo.getWhatever();
     ....


在编译时,我的IDE不会抱怨任何事情。但是,在运行时,当我明确地执行该功能时,我得到了:

FooListComponent.html:2 ERROR TypeError: foo.getWhatever is not a function


进行调试时,我清楚地看到它不是Foo实例,而只是一个普通的Object。如果我尝试进行强制转换或类似操作,没有什么可以像Foo实例那样帮助我进行检索。

我的猜测是,它被视为来自模板的对象,是否应该执行类似Instantiation Loader之类的操作?

最佳答案

根据注释,您需要将响应映射到类实例中以访问类方法:

this.http.get('foourl').pipe(map(fooResponse => new Foo(fooResponse))


这应该可以使您的代码正常工作,但是值得怀疑的是,这通常是一个不错的设计决策,因为使用类和类方法会在javascript环境中造成很多痛苦,因为字符串化和解析会失去所有类功能。我倾向于使用功能方法/样式。

09-10 14:33
查看更多