1
resposta

Dúvida sobre a reinderização do componente em caso de erro

Boa noite,

No exemplo foi criado o resolver ListaAnimais com um get dos animais e foi excluído a inicialização do listaAnimaisService no construtor. Ficou claro que esse get será feito antes de reinderizar o comonente através do resolver, porém fica a dúvida: Caso eu queira utilizar um post de animaiService ou um put eu teria que adicionar novamente o listaAnimaisService no construtor ?

Outro ponto, em caso de uma falha no resolver por um retorno http 500 ou 400... o componente lista animais continuaria sendo reinderizado porém sem carregar a lista? Lembrando que no exemplo também foi removido o ngIf no html de listaAnimais.. ou seja, caso não retorne nenhum animal, o html não seria reinderizado?

obrigado.

1 resposta

Oi Rafael, tudo bem?

Desculpe a demora em retornar.

Em relação à sua primeira pergunta, se você deseja utilizar um método HTTP diferente, como POST ou PUT, no serviço animaisService, e você removeu a inicialização do listaAnimaisService no construtor, você precisaria adicioná-lo novamente caso queira acessar os métodos desse serviço dentro do componente. A remoção da inicialização do serviço no construtor não afeta diretamente a disponibilidade dos métodos desse serviço dentro do componente. No entanto, se você não inicializar o serviço, não poderá acessar diretamente os métodos fornecidos por ele.

Aqui está um exemplo de como você poderia adicionar novamente o listaAnimaisService no construtor, caso precise usar um método POST ou PUT:

constructor(private listaAnimaisService: ListaAnimaisService) {}

Isso permitirá que você utilize os métodos fornecidos por listaAnimaisService, como o método POST ou PUT, dentro do componente.

Em relação à sua segunda pergunta, caso ocorra uma falha no resolver devido a um retorno HTTP 500 ou 400, o componente listaAnimais será renderizado mesmo assim, porém a lista de animais não será carregada. No exemplo que você mencionou, onde o ngIf foi removido do template do componente, não haverá uma verificação explícita para exibir ou ocultar o conteúdo do componente com base na disponibilidade da lista de animais.

Se ocorrer um erro no resolver e a lista de animais não for retornada corretamente, o componente será renderizado com a estrutura HTML definida no template, mas a lista de animais não será exibida. Nesse caso, o conteúdo do componente será renderizado, mas o espaço onde a lista deveria estar será vazio.

Se você deseja controlar o comportamento do componente em caso de erro no resolver, uma opção é adicionar novamente o ngIf ao template do componente para verificar se a lista de animais está disponível antes de renderizá-la. Isso permitirá que você exiba uma mensagem de erro personalizada ou tome qualquer outra ação adequada em caso de falha no resolver.

Aqui está um exemplo de como adicionar o ngIf ao template para verificar a disponibilidade da lista de animais:

<div *ngIf="animais">
  <!-- Conteúdo do componente listaAnimais quando a lista está disponível -->
  <ul>
    <li *ngFor="let animal of animais">{{animal.nome}}</li>
  </ul>
</div>

<div *ngIf="!animais">
  <!-- Conteúdo do componente listaAnimais quando a lista não está disponível (erro no resolver) -->
  <p>Ocorreu um erro ao carregar a lista de animais.</p>
</div>

Nesse exemplo, estamos usando o ngIf para verificar se a variável animais está definida ou não. Se estiver definida, o conteúdo dentro do primeiro div será renderizado, exibindo a lista de animais. Caso contrário, o conteúdo dentro do segundo div será renderizado, exibindo uma mensagem de erro personalizada.

Um abraço e bons estudos.