Сводка: У меня есть компонент диаграммы, компонент меню фильтра и служба, которая фильтрует и устанавливает BehaviorSubject.Я хочу, чтобы моя служба сначала выполняла HTTP-вызов для получения данных, мое меню фильтров для передачи дат фильтрации в службу для фильтрации данных и, наконец, мой компонент диаграммы для подписки на BehaviorSubject, чтобы он мог отображать отфильтрованные данные.
Компонент меню фильтра:
export class FilterMenuComponent {
startDate: string;
endDate: stirng;
constructor(private service: FilterService) { }
ngOnInit() {
this.service.setData();
this.setDates();
}
setDates() {
//grabs dates from ui
this.service.filterData(startDate, endDate);
}
Служба фильтрации:
export class FilterService {
filteredDataBS: BehaviorSubject<Data>;
data: Data;
constructor(private _http: HttpClient) { }
setData() {
//http call to get initial data
this._http.get().subscribe(data => {
this.data = data;
});
}
filterData(startDate: string, endDate: string) {
this.data = this.data.filter(xxxxxxxxxxxxxx);
this.filteredDataBS.next(data);
}
Компонент диаграммы:
export class ChartComponent {
data: Data;
constructor(private service: FilterService) { }
ngOnInit() {
this.service.filteredDataBS.subscribe(data => {
this.data = data;
});
}
Проблема: Поскольку вызов http для установки исходных данных может занять довольно много времени, FilterMenuComponent
уже выполняется и вызывает фильтрацию данных.Затем я получаю ошибки при вызове .filter on undefined
.Мне нужно, чтобы FilterMenuComponent ожидал и вызывал this.service.filterData()
до тех пор, пока ПОСЛЕ FilterService не получит свои исходные данные от вызова http.