1
resposta

Utilizar o selectRootElement do Render2

Bom dia, na aula utilizamos nativeElement e blindamos om isPlataformBrowers.

Procurei porém acredito que a equipe do manteve depreciado o invokeElementMethod. Minha duvida é se poderia ao invés de criar platorf detector, utilizasse selectRootElement do Render2 estaria blindado no SRR ?

Minha implementação ficou

@Component({
  templateUrl: 'signin.component.html'
})
export class SigninComponent implements OnInit {

  loginForm!: FormGroup;

  @ViewChild('userNameInput') userNameInput!: ElementRef<HTMLInputElement>;

  constructor(
    private readonly _router: Router,
    private readonly _formBuilder: FormBuilder,
    private readonly _authService: AuthService,
    private readonly _platFormDetectorService: PlatformDetectorService,
    private readonly _renderer: Renderer2
  ) {}

  ngOnInit(): void {
    this.loginForm = this._formBuilder.group({
      userName: [null, Validators.required],
      password: [null, Validators.required]
    });
  }

  login() {
    const userName = this.loginForm.get('userName')?.value;
    const password = this.loginForm.get('password')?.value;

    this._authService.authenticate(userName, password)
      .subscribe(
        () => this._router.navigate(['user', userName]),
        err => {
          this.loginForm.reset();
          this._renderer.selectRootElement(this.userNameInput.nativeElement).focus()
          // this._platFormDetectorService.isPlatformBrowser() && this.userNameInput.nativeElement.focus();
          alert(`${err.status} - ${err.statusText}`)
        }
      )
  }

}
1 resposta

Olá Felipe, tudo bem com você?

Peço desculpas pela demora em obter um retorno.

Usar o serviço Renderer2 e seu método selectRootElement, como apresentado no código, é uma boa alternativa. A classe Renderer2 é uma abstração que permite manipular o DOM de forma segura.

Ao usar o Renderer2, você está garantindo que a chamada focus() será feita corretamente, independentemente do ambiente em que o código esteja sendo executado. Essa alteração permitirá que seu código funcione corretamente tanto no lado do cliente (navegador) quanto no lado do servidor (Angular ou outro ambiente de renderização no servidor). Isso torna sua implementação segura e "blindada" no contexto do SSR.

Gostaria de aproveitar a oportunidade e compartilhar com você que atualizamos nossos cursos de Angular com novos recursos e conteúdos para ajudar você a se manter atualizada com as últimas tendências e práticas da indústria. Nestes novos cursos você aprenderá a desenvolver CRUD, trabalhar com formulários, usar o RxJS dentre outras possibilidades, deixo o link abaixo caso queira conhecer e mergulhar em conhecimento:

Espero ter ajudado. Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!