我正在研究一个函数,有人可以就如何指定函数外的函数给出建议吗? 在if语句中,我想调用otherfunction()。
@Injectable()
export class menuService {
constructor (){}
testing(){ console.log('something')}
loadwidget(){
// not able to call this function
this.testing()
}
}
我得到的错误是“this.testing不是函数”
ERROR TypeError: this.testing is not a function
at Object.menuService.loadwidget (http://localhost:3000/main.bundle.js:755:14)
at Object.eval [as handleEvent] (ng:///AppModule/tbuttonsComponent.ngfactory.js:36:41)
at handleEvent (http://localhost:3000/vendor.dll.js:13146:138)
at callWithDebugContext (http://localhost:3000/vendor.dll.js:14354:42)
at Object.debugHandleEvent [as handleEvent] (http://localhost:3000/vendor.dll.js:13942:12)
at dispatchEvent (http://localhost:3000/vendor.dll.js:10121:21)
at http://localhost:3000/vendor.dll.js:10711:38
答案 0 :(得分:1)
确切地说,您应该如何使用this
关键字访问班级中的其他方法。如果您完全按照上述课程使用上述课程,则问题是variableName
未在customfunction()
内的任何位置定义,因此会出错。 console.log()
中的otherfunction()
语句因此而永远无法运行。
修改:我看了一下你添加的Plunker,结果证明这是一个范围问题。我更新了menuService
类,使用箭头函数隐式绑定this
到menuService
,第三个按钮开始按预期工作:
export class menuService {
constructor (){
// I moved this into the constructor and updated loadingwidget below
this.menu = [{
id: 1,
loadingwidget: () => { this.loadwidget(); },
}];
}
testing(){
console.log('something');
alert('something');
}
loadwidget(){
this.testing();
}
}
这是您的Plunker的工作版本:https://plnkr.co/edit/sF08cccRb2b0xkfTspVV?p=preview
答案 1 :(得分:0)
你如何定义应该工作。如果otherfunction()
没有被调用,请检查if语句,也许比较不会返回您的预期。
请查看此plunker示例:https://plnkr.co/edit/4MWYDdeS5cCTDHI64HO2?p=preview
答案 2 :(得分:0)
这不是因为Injectable而且您不需要Injectable,因为您没有向服务中注入任何内容。所以你可以省略它。但我可以看到像这样的代码中存在一些问题,
menu = [
{
id = 1,
loadingwidget: this.loadwidget
}
]
应该在哪里
menu = [
{
id:1,
loadingwidget: this.loadwidget
}
]
并且未正确编译。它运作得很好。