Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Atualizar valores alterados em componentes filhos no componente pai

Olá,

Preciso pegar os valores alterados nos filhos para quando salvar o objeto os valores modificados nos filhos também sejam gravados corretamente.

Eu consigo preencher na tela os valores nos filhos quando ele já existem no objeto pai, mas se mudar qualquer coisa no filho não se reflete no pai para salvar.

Atualmente somente o valor modificado no pai é alterado e salva corretamente.

Abaixo criei uma pseudo estrutura do que estou fazendo, mas não está funcionando.

Gostaria de uma ajuda.

Eu tenho a seguinte estrutura.

ObjetoPai{
    id: number;
    comentario: string;
    filhos: [
        {
            id: number;
            comentario: string;
            autor: string;
        },
        {
            id: number;
            comentario: string;
            autor: string;
        },
        ...
    ]
}

Então criei um componente PaiComponent e um FilhoComponent

[pai.component.ts]

...
@Component({
  selector: 'app-pai',
  templateUrl: './pai.component.html',
})
export class PaiComponent implements OnInit {

public pai: Pai = new Pai;
public attFilhos: Filho[] ;

 ngOnInit() {
       //GET OBJETO PAI e FILHOS se existirem
       this.paiService.getPaiById(this.paiId).subscribe(
              res => { 
                      this.pai = res; 
                     this.attFilhos = this.pai.Filhos;
              },
             (error)=> console.log(error)
       );
    }
}

[filho.component.ts]

...
@Component({
  selector: 'app-filho',
  templateUrl: './filho.component.html',
})
export class FilhoComponent implements OnInit {

  @Input() filhos: Filho[];

E os html ficaram assim:

[pai.component.html]

...
<form (ngSubmit)="gravaRecurso($event)">

      <label for="comentarioPai">Pai Comentario:</label>
      <input [(ngModel)]="pai.comentario" type="text"

      <app-filho (filhos)="attFilhos"></app-filho>

  <button type="submit" class="btn btn-primary">Salvar</button>
</form>

[filho.component.html]

...
<div *ngFor="let filho of filhos">
      <label for="comentariofilho">Filho Comentario:</label>
      <input [(ngModel)]="filho.comentario" type="text"

      <label for="autorfilho">Filho Autor:</label>
      <input [(ngModel)]="filho.filho" type="text"
</div>

Já agradeço a todos pela atenção.

1 resposta
solução!

Comunicação entre componente fillho para pai é através de evento customizado. Da uma olhada no capítulo que cria o componente botao. Se não quiser fazer assim, tem que partir para uma arquitetura flux.