Pesquisa de site

typescript - Angular 6 'não é uma função' ao usar this. dentro de outra função


Estou tendo alguns problemas com TypeScript, eu tenho este código:

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');
    }
  }

E me dá o erro:

ERRO TypeError: "_this._teamService.getTeamsByUser não é uma função"

Em outros artigos, as pessoas dizem para usar função arrow, mas eu acho que isso já é uma função arrow?

Eu tentei usar let that=this; e então chamar that em vez de this na segunda função, mas não funcionou.

Outra coisa que eu tenho visto as pessoas fazendo é usar .bind(this), mas eu não sei onde devo fazer isso.

Alguém pode me explicar por que isso está acontecendo e como resolver isso?

Resposta #1

Ok, problema resolvido. Eu só usei private loadTeams(){...} como você me disse, mas não sei por que tive que desligar o Angular e executar o ng serve novamente para funcionar.

Resposta #2

Você pode ter um problema com sua injeção ou construção do _teamService. Declarar o loadTeams de maneiras diferentes funciona, desde que a chamada do serviço não seja indefinida.

Então,

loadTeams() { ... ou loadTeams=function() {... ou loadTeams =() => { ...

Todos funcionam se as coisas estiverem devidamente inicializadas.

Eu montei um Scratchpad em Typescript para brincar com isso, não consigo fazer falhar com nenhum deles, mas, por outro lado, minha versão falsa do "_teamsService" está inicializada.

Veja o exemplo em TypeScript. Você pode substituir a definição da função de qualquer uma dessas três maneiras e as coisas funcionam muito bem.