Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Cannot read property 'isLoggedIn' of undefined

No meu projeto de MEAN com Angular2 aqui do Alura, eu implementei a autenticação sugerida por outro aluno aqui do fórum. https://cursos.alura.com.br/forum/topico-adicionando-token-em-toda-requisao-com-angular-2-solucao-27821

A autenticação esta funcionando normalmente, agora eu quero exibir algumas coisas apenas para os usuários que estão logados, como o seguinte:

<ul class="nav navbar-nav navbar-right" *ngIf="usuario.loggedIn">
        <li><a href="../navbar/">Olá, Rafael</a></li>
      </ul>

mas estou recebendo o seguinte erro:

ERROR TypeError: Cannot read property 'loggedIn' of undefined

O meu usuarioService possui o seguinte:

@Injectable()
export class UsuarioService { 

private _loggedIn: BehaviorSubject<boolean> = new BehaviorSubject(false);
    public loggedIn: Observable<boolean> = this._loggedIn.asObservable();

isLoggedIn() {
    let token = localStorage.getItem('token');

    if(token){ //essa atribuição é feita para atualizar a variavel e o resto do sistema ser notificado
      this._loggedIn.next(true);
    } else {
      this._loggedIn.next(false);
    }

    return this._loggedIn.getValue();
  }

}

Qual pode ser o problema?

2 respostas

Bom dia.

Não cheguei a ler que solução é essa. Mas pela mensagem de erro, ele esta indicando que a propriedade não existe. Já tentou chamar direto isLoggedIn()? JavaScript e Angular/TypeScript não é java, não existe o padrão JavaBean.

solução!

Percebi que você está chamando "usuario.loggedIn" e não diretamente o atributo do usuarioService. Tente ter certeza que essa instância 'usuario' tem a property 'isLoggedIn' e que a mesma está iniciada com algum valor ou que faça corretamente a chamada ao service.

Ajudaria bastante termos acesso ao component que tem o usuário como atributo e que faz a importação do usuarioService.