我在自定义组件的模板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环境中造成很多痛苦,因为字符串化和解析会失去所有类功能。我倾向于使用功能方法/样式。