Angular 2:Ts:嵌套函数

时间:2017-05-25 13:37:06

标签: javascript angular types

我正在研究一个函数,有人可以就如何指定函数外的函数给出建议吗? 在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

https://plnkr.co/edit/XCHsu19UhR9wWxz4VLOx?p=preview

3 个答案:

答案 0 :(得分:1)

确切地说,您应该如何使用this关键字访问班级中的其他方法。如果您完全按照上述课程使用上述课程,则问题是variableName未在customfunction()内的任何位置定义,因此会出错。 console.log()中的otherfunction()语句因此而永远无法运行。

修改:我看了一下你添加的Plunker,结果证明这是一个范围问题。我更新了menuService类,使用箭头函数隐式绑定thismenuService,第三个按钮开始按预期工作:

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
      }
    ]

并且未正确编译。它运作得很好。