Если запрос данных можно инициировать с помощью распознавателя, все будет проще, однако вы можете следовать одному из предыдущих ответов об использовании компонента интеллектуального контейнера, который оборачивает ваши компоненты, которые должны использовать данные. Этот интеллектуальный контейнер может инициировать запрос http, но в службе задайте канал с помощью касания, чтобы задать значение ответа BehaviorSubject, а затем в ваших компонентах, которым требуется данные, используется асинхронный канал c для управления подписками данных.
Вот пример кода услуги:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { BehaviorSubject, Observable } from 'rxjs';
import { map, tap } from 'rxjs/operators';
@Injectable({
providedIn: 'root',
}) export class ExampleService {
private _data: BehaviorSubject<any> = new BehaviorSubject({ properties: [], geometry: [] });
public data$: Observable<any> = this._data.asObservable();
constructor(private http: HttpClient){}
set data(data) {
this._data.next(data);
}
get data() {
return { ...this._data.value };
}
public getEarthquakeData(url): Observable<any[]> {
return this.http.get<any[]>(url)
.pipe(
tap(
(data: any) => this.data = data
)
)
}
}