У меня есть служба, которая запрашивает информацию с сервера. Мне нужно только один раз запустить запрос и сделать его доступным для каждого компонента. До сих пор у меня есть:Angular2 Service работает http-метод только один раз
@Injectable()
export class ProductService {
private products: Observable<IProduct[]>;
private _productUrl = 'app/api/products2.json';
constructor(private _http: Http) {
console.log(this.products);
this.products = this.setProducts();
}
setProducts(): Observable<IProduct[]> {
return this._http.get(this._productUrl)
.map((response: Response) => <IProduct[]>response.json())
.do(data => console.log('A: ' + JSON.stringify(data)))
.catch(this.handleError);
}
getProducts(): Observable<IProduct[]> {
return this.products;
}
private handleError(error: Response) {
return Observable.throw(error.json().error || 'Server error');
}
}
При изменении маршрута, он запускает линию конструктор setProducts
снова. this.products
всегда не определено, когда оно регистрируется, поэтому выполнение инструкции if не работает. Что я могу изменить, чтобы убедиться, что этот HTTP-запрос не запущен, когда служба уже должна иметь эту информацию?
Спасибо!
Смотрите также http://stackoverflow.com/questions/36271899/what-is-the-correct-way-to-share-the-result-of-an-angular-2- http-network-call-in –