gpt4 book ai didi

http - Angular2 服务只运行一次 http 方法

转载 作者:可可西里 更新时间:2023-11-01 17:32:28 26 4
gpt4 key购买 nike

我有一个从服务器请求信息的服务。我只需要运行一次请求并使其可用于每个组件。到目前为止,我有:

@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 请求未运行?

谢谢!

最佳答案

在你的 Bootstrap 中执行此操作

it's because each time a new instance of service is created for each component

import {ProductService } from './app/services/product.service'; //put your path not mine
import { provide } from '@angular/core';
import {ReflectiveInjector} from '@angular/core';

let injector = ReflectiveInjector.resolveAndCreate(HTTP_PROVIDERS);
let http = injector.get(Http);
let prodService = new ProductService (http);

bootstrap(AppComponent, [
[provide(ProductService ,{useValue:prodService})]
]).catch(err => console.error(err));

关于http - Angular2 服务只运行一次 http 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38705148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com