Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Quando retornar true ou false no guard?

No código da última aula, retornamos false no bloco if e true fora do bloco. Quando devemos retornar true e quando devemos retornar false? Quais os cenários? Eu inverti a ordem dos returns e não deu certo, mas queria entender a lógica para eu poder implementar em projetos futuros. Se eu entendi correto: Toda e qualquer validação com if ou similares nos devemos, necessariamente, retornar false para impedir o 'load'? E em caso negativo retornar true para permitir o 'load'?

    if (this.usuarioService.estaLogado()) {
        this.router.navigate(['animais']);
        return false;
      }
      return true;
1 resposta
solução!

Ôpa William, vamos junto aqui na lógica então:

if (this.usuarioService.estaLogado()) {
    this.router.navigate(['animais']);
    return false;
}
return true;

A primeira lógica que precisará assimilar é a que você já assimilou, é a lógica do if e else. Por que a estrutura do if e else pode ser utilizada de duas formas:

if (lógica) {
... return
} else {
... return
}

ou

if(lógica) {
... return
}
... return

Então tanto faz utilizar um ou outro que vai funcionar, então quando tem apenas dois momentos de decisão na estrutura, o else por convenção será aceito sem mesmo escrever a palavra reservada else.

Agora vamos para o entendimento da lógica do bloco:

A necessidade do return false é que se o usuário já está logado, não será permitido entrar mais na rota de login (home) novamente, ou seja, não há mais esta necessidade.

Porém se você está na rota de animais por exemplo e por algum motivo ficou desconectado e tentar acessar a rota de login (home), então você será permitido acessar a rota com o return true.

Espero ter ajudado.