Acompanhando a aula, me preocupou um pouco o fato de o componente Pensamento
deixar de ser "burro", no sentido de ter lógicas próprias.
Então pensei numa alternativa, onde o pai seria avisado da alteração, e ele modificaria a lista sendo exibida.
Desse modo, ficaria (um lembrete: to fazendo meu projeto em inglês):
Em PensamentoComponent
(ThoughtComponent
)
export class ThoughtComponent {
//...
@Output() favoriteUpdated = new EventEmitter();
constructor(private thoughtService: ThoughtsService) {}
//...
updateFavorite(): void {
this.thoughtService
.updateFavoriteThought(this.thought)
.subscribe(() => this.favoriteUpdated.emit(this.thought));
}
}
Em ListaPensamentosComponent
(ListThoughtsComponent
):
export class ListThoughtsComponent implements OnInit, OnDestroy {
listThoughts: Thought[] = [];
currentPage = 1;
hasMoreThoughts: boolean = true;
filter: string = '';
shouldListFavorites: boolean = false;
$onDestroy = new Subject<boolean>();
constructor(private thoughtService: ThoughtsService) {}
//...
onFavoriteUpdated(thought: Thought): void {
if (this.shouldListFavorites && !thought.favorite) {
this.listThoughts.splice(this.listThoughts.indexOf(thought), 1);
}
}
//...
}
E em lista-pensamentos.component.html
(list-thoughts.component.html
):
<section class="container">
<!-- .... -->
<div class="mural" *ngIf="listThoughts.length > 0; else noThoughts">
<div *ngFor="let thought of listThoughts">
<app-thought
[thought]="thought"
(favoriteUpdated)="onFavoriteUpdated($event)"
></app-thought>
</div>
</div>
</section>
<!-- .... -->
Isso eliminaria a necessidade de usr uma lista de favoritos em paralelo. Espero que seja útil e, quaisquer duvidas, olhem esse commit