Источник Дэн Уолин (ng-conf: Освоение темы: параметры связи в RxJS), не рекомендуется использовать OutPut, когда у вас есть компонент на более глубоком уровне, который должен взаимодействовать с более высоким рычагомкомпонент, представьте, что у вас есть 5 или 6 уровней !!, вместо этого вы должны использовать Subject : вы можете создать и шину событий через наблюдаемую службу
События здесь - это список событий, если выхотите
export enum Events{
'payment done',
// other events here
}
@Injectable()
export class EventService {
private subject$ = new Subject()
emit(event: EmitEvent) {
this.subject$.next(event);
}
on(event: Events, action: any): Subscription {
return this.subject$.pipe(
filter((e: EmitEvent) => e.name == event),
map((e: EmitEvent) => e.value)).subscribe(action);
}
}
, так что теперь представьте, что вы хотите отправить событие из Child3 , например, после выполнения платежа => уведомить родительский компонент
export class Child3Component implements OnInit {
constructor(public eventservice : EventService ) {}
pay(paymentAmount: any) {
this.eventservice.emit(
new EmitEvent('payment done',paymentAmount));
}
}
Теперь в вашем родительском компоненте вы можете вызвать такой метод, и вы получите событие
export class ParentComponent implements OnInit {
constructor(public eventservice : EventService ) {}
ngOnInit() {
this.eventservice.on('payment done', (paymentAmount => console.log(paymentAmount));
}
}