Como deve ser feito o uso/observação @Output()
de emissores de eventos pais em componentes filhos?
Por exemplo, nesta demonstração, o componente filho usa o @Output onGreetingChange
seguinte:
<app-greeting [greeting]="onGreetingChange | async"></app-greeting>
E isso funcionará se onGreetingChange
for emitido no AfterViewInit
gancho do ciclo de vida.
ngAfterViewInit() {
this.onGreetingChange.emit('Hola');
}
No entanto, isso produz um ExpressionChangedAfterItHasBeenCheckedError
erro.
Existe uma maneira de fazer isso funcionar sem produzir o erro?
Tentei emitir em ambos constructor
e OnInit
. Pensamentos?
Você pode acionar
change detection
manualmente, usandodetectChanges()
stackblitz
Você sempre pode usar
BehaviorSubject
em vez deEventEmitter
. A vantagem está no valor inicial. Veja isso:https://stackblitz.com/edit/stackblitz-starters-bncmrb?file=src%2Fmain.ts
Aplicativo principal
HTML
Criança um
Criança dois
É melhor usar
ChangeDetectionStrategy.OnPush
para desempenhoExemplo de código https://stackblitz.com/edit/stackblitz-starters-grepmj?file=src%2Fmain.ts