使用此功能时,Angular 6“不是函数”。在另一个功能内

时间:2018-10-04 13:41:22

标签: angular typescript

我在打字稿方面遇到一些问题,我有以下代码:

private loadTeams = function(){
    let token =  sessionStorage.getItem('token');
    if(token !== undefined && token !== null && token !== ''){
      this._userService.getUserByToken(token)      
        .subscribe(user => {
          this._teamService.getTeamsByUser(token, user)
            .subscribe(data => {
              this.teamList = data.data;
            }, error => {

            });
        }, error => {

        });
    } else {
      sessionStorage.removeItem('token');
    }
  }

给我错误:

  

错误TypeError:“ _ this._teamService.getTeamsByUser不是函数”

在其他文章中,人们告诉使用箭头功能,但我认为它已经是箭头功能了?

我尝试使用 让那个= this; ,然后在其中调用 that 而不是 this 第二个功能,但是没有用。

我见过人们做的另一件事是使用 .bind(this),但我不知道该在哪里做。

有人可以向我解释为什么会发生这种情况以及如何解决吗?

4 个答案:

答案 0 :(得分:1)

确定的问题已解决。我只是像您告诉我的那样使用private loadTeams(){...},但是我不知道为什么我必须关闭角度并重新使用。

答案 1 :(得分:1)

您的_teamService注入或构造可能有问题。只要未定义服务调用,就可以以不同的方式声明loadTeam。

所以

loadTeams() { ... 要么 loadTeams = function() {... 要么 loadTeams = () => { ...

如果一切正确初始化,那么所有方法都可以工作。

我确实拼凑了一个Typescript便签本来玩,不能让其中的任何一个失败,但随后我的“ _teamsService”假版再次被初始化。

请参见打字稿示例Typescript example。您可以用这三种方式中的任何一种替换函数定义,一切正常。

答案 2 :(得分:0)

this._userService来自哪里?可能尚未初始化。

您忘了将其注入构造函数吗?

答案 3 :(得分:0)

执行此操作时:

private loadTeams = function(){
  // this here refers to the function
}

这是您应该做的:

private loadTeams() {
  // this refers to the instance of the class
}

或者,将其绑定到构造函数中,如下所示:

constructor(/* inject stuff here */) {
  this.loadTeams = this.loadTeams.bind(this)
}
private loadTeams = function(){
  // this refers to the instance of the class
}

但是,我不认为这是您的问题。

如果这是您的问题,那么this._userService将不确定,并且您在致电null pointer error时会得到undefined.getUserByToken(token)

仅供参考,我在此帖子中已经说过16次了,您发现了吗?