2
respostas

O routerLink não funciona no primeiro redirecionamento para GlobalErrorComponent

Esta dúvida é a mesma do tópico "Global Error Handler e Redirecionamento".

Na aula Global error handler e log no server side, atividade 10 (Redirecionamento), quando há o redirecionamento pela primeira vez para a página de erro do GlobalErrorComponent, o routerLink não funciona. Entretanto, ao atualizar a página ele funciona.

Isto também pode ser observado no vídeo da aula. Em 4:35, o link não funciona. Em 4:38 a página é recarregada e o link passa a funcionar. Em 5:47 novamente o link não funciona. Em 5:53 a página é recarregada, e o link passa a funcionar por uma fração de segundo, antes do navegador voltar para a página do usuário.

Qual seria o motivo deste comportamento? É algum problema no código do projeto ou um bug desta versão do Angular?

Outra dúvida relacionada: como debugar o código nestas situações? Ou seja, quando o problema observado não gera nenhum erro, e ocorre no template, e não no código em TypeScript.

Obs.: o módulo RouterModule foi importado dentro de errors.module.

2 respostas

Fala aí Jefferson, tudo bem? Vamos lá:

Qual seria o motivo deste comportamento? É algum problema no código do projeto ou um bug desta versão do Angular?

Consegue me passar os códigos do seu projeto? Pode ser o Github, assim fica mais fácil eu simular o problema e entender (pois nunca aconteceu comigo).

Outra dúvida relacionada: como debugar o código nestas situações? Ou seja, quando o problema observado não gera nenhum erro, e ocorre no template, e não no código em TypeScript.

Se você estiver usando o vs code tem um plugin para fazer debug, é muito bom ou sugiro o velho conhecido console.log.

Espero ter ajudado.

Consegue me passar os códigos do seu projeto? Pode ser o Github, assim fica mais fácil eu simular o problema e entender (pois nunca aconteceu comigo).
O código disponibilizado na última atividade da última aula do curso está apresentando este problema. Só é necessário alterar o arquivo global-error-handler.ts, na linha 31, de
if(environment.production) router.navigate(['/error']);

para

router.navigate(['/error']);

Assim a página de erro também será exibida em ambiente de desenvolvimento (e é justamente nesta página de erro que ocorre o problema).

Se você estiver usando o vs code tem um plugin para fazer debug, é muito bom ou sugiro o velho conhecido console.log.
Então, o problema é justamente que o erro não ocorre no código TypeScript, então não sei onde colocar os breakpoints ou logs. Imagino que, neste caso, seria necessário debugar alguma função do próprio Angular que monta a página a partir do template.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software