Мне нужно отобразить цепочку компонентов (скажем, сетки в блейдах), в которой после загрузки данных первого компонента я нажму на строку данных этого компонента, и она откроет следующий компонент. При щелчке строки данных следующего компонента он откроет другой компонент и т. Д.
Подход, которому я следую - у меня есть общая служба для всех этих компонентов, и когда данные загружаются для любого компонента, Компонент вызывает следующий метод для Поведенческого объекта моего сервиса - this.service.dataLoadedEvent$.next(componentName)
Мой метод обслуживания выглядит так -
public renderAllComponents(selectedOption, componentsToRender, componentsInfo): void {
let componentInstance;
for (let i = 0; i < componentsToRender.length; i++) {
componentInstance = new componentsToRender[i](this);
if (i === 0) {
// For the component in the first/initial blade
this.addFirstComponent(componentInstance[i]);
}
this.dataLoadedEvent$.subscribe((val) => {
if (val === componentsInfo[i].name) {
componentInstance.onSelect(selectedOption[componentsToRender[i].name]);
}
});
}
}
Компоненты выглядят как -
public ngOnInit() {
this.view = this.comp.pipe(
tap(state => {
this.isLoading = true;
}),
switchMap(state => {
return this.orderService.fetch(state);
}),
tap(() => {
this.isLoading = false;
this.service.dataLoadedEvent$.next(this.constructor.name);
})
);
}
Но проблема здесь в том, что для l oop происходит аванс до того, как сервис уведомляется о завершении загрузки данных. Таким образом, он устанавливает переменную l oop в последнее значение, и метод вызывается в последнем componentInstance, который не является ожидаемым поведением. Любая помощь будет оценена. Заранее спасибо !