У меня следующий сценарий, в котором я подписываюсь в Компоненте A на Субъекта (service.save
) и хочу вызвать некоторые функции Компонента B, C, D, E до того, как это событие пройдет.Я думал о чем-то вроде этого:
//Component A only one subscribing
this.service.save.subscribe((event)=>{
this.sharedService.beforeSaveFunctions.forEach(fn => {
fn(event);
});
// ... do something
});
@Injectable()
export class SharedService{
beforeSaveFunctions: any[];
registerBeforeSaveFunction(fn:any){
this.beforeSaveFunctions.push(fn);
}
}
//Component B, C, D, ...
ngOnInit(): void {
this.sharedService.registerBeforeSaveFunction(handleSave.bind(this));
}
handleSave(event){
//Do something..
}
Таким образом, каждый компонент может вызвать this.sharedService.registerBeforeSaveFunction()
, чтобы передать свою собственную функцию, которая впоследствии будет выполнена при подписке в Компоненте А.
Это хорошо?стиль?У меня нет доступа к службе, которая содержит save
Subject, так как это внешняя библиотека.Если я подписываюсь на него в каждом компоненте, и каждый компонент делает свое дело, он становится грязным, и у меня возникают проблемы с асинхронностью, когда одна подписка завершается раньше другой.