2
respostas

Complemento para a dúvida acima "Funcionamento do @Input Pai e Filho"

Gostaria apenas de complementar sobre o quê foi dito neste tópico/dúvida: https://cursos.alura.com.br/forum/topico-funcionamento-do-input-pai-e-filho-300948

Temos que lembrar que o Angular é um framework Javascript, e JS é uma linguagem Orientada a Objetos. O que acontece nesta situação é que nós temos 2 referências para um mesmo objeto, que no caso é a Lista de Pensamentos. Vejamos o método abaixo:

listarFavoritos() {
    this.temMaisPensamentos = true;
    this.paginaAtual = 1;
    this.favoritos = true;
    this.pensamentoService.listar(this.paginaAtual, this.filtro, this.favoritos).subscribe(listaPensamentos => {
      this.listaPensamentos = listaPensamentos;
      this.listaFavoritos = listaPensamentos;
    })
  }

Quando este método é chamado, o serviço faz a requisição no servidor, pega a resposta dele que é a Lista de Pensamentos e cria um objeto para esta lista, depois gera 2 referências para este objeto que são listaPensamentos e listaFavoritos, porém o objeto é um só, o que muda é apenas a referencia. Portanto quando o método "atualizarFavoritos()" remove o pensamento "desfavoritado" da "listaFavoritos", esta mudança é refletida em "listaPensamentos" pois ambos referenciam a mesma lista, logo qualquer alteração em um vai refletir no outro.

atualizarFavoritos() {
    this.pensamentoService.mudarFavorito(this.pensamento).subscribe(() => {
        this.listaFavoritos.splice(this.listaFavoritos.indexOf(this.pensamento), 1);
    });
  }
2 respostas

Olá, Jorge!

Você está correto em sua análise. O comportamento que você descreveu é um aspecto fundamental da programação orientada a objetos e é especialmente relevante em JavaScript e, por extensão, no Angular.

Você é um aluno muito curioso e engajado, é um prazer contar com você aqui no fórum em especial para os demais alunos de Angular.

Qualquer curiosidade, dúvida ou sugestão conte conosco.

Sucesso

Um grande abraço e até mais!

Muito obrigado Victor!

Sucesso pra vc tb!