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

Só existirá userNameInput ou emailInput se o ciclo de vida estiver em AfterViewInit

No OnInit, os objetos da view do componente ainda não são disponibilizados, tanto que, ao acessar o this.userNameInput, um erro de execução estilo "objeto não disponível" é mostrado. Então, procurei um evento que me disponibilizasse essa instância: achei 2: o AfterViewInit e o AfterViewChecked (esse último dispara várias vezes, o que fará com que o foco fique sempre no Input, não deixando o usuário passar para os outros campos), então, optei pelo primeiro evento, que só dispara 1x:

  ngAfterViewInit(): void {
     if(this.platformDetectorService.isPlatformBrowser()) {
      this.userNameInput.nativeElement.focus(); 
    } 
  }
3 respostas

Fala ai Marcus, tudo bem? Desde a versão do Angular alguns detalhes foram mudados durante o ciclo de vida dos componentes.

Esse de injetar os componentes buscados via template foi impactado e realmente passou à ser injetado em ciclos de vidas executados mais tarde do que onInit.

Nesse caso, você fez bem em utilizar o AfterViewInit.

Espero ter ajudado.

solução!

Que faz mais sentido, mesmo... Equipe do Angular está ligada!!!

Sim, muito mais Marcus.

Abraços e bons estudos.