在Angular2服务中多次发出Http请求

我创建了一个发出简单GET请求的服务:
private accountObservable = null;

constructor(private _http: Http) {
}

getAccount () {
    // If we have account cached,use it instead
    if (this.accountObservable === null) {
        this.accountObservable = this._http.get('http://localhost/api/account')
            .map(res => <Account> res.json().data)
            .catch(this.handleError);
    }

    return this.accountObservable;
}

我在我的bootstrap函数添加了该服务以全局提供它(我希望为所有组件提供相同的实例):

provide(AccountService,{ useClass: AccountService })

问题是当我在不同的组件中调用此服务时,每次都会发出GET请求.因此,如果我将其添加到3个组件,即使我检查是否已存在可观察量,也会发出3个GET请求.

ngOnInit() {
  this._accountService.getAccount().subscribe(
    account => this.account = account,error =>  this.errorMessage = <any>error
  );
}

如何防止多次发出GET请求?

使用 Observable.share()
if (this.accountObservable === null) {
    this.accountObservable = this._http.get('./data/data.json')
      .share()
      .map(res => res.json())
      .catch(this.handleError);
}

Plunker

在Plunker中,AppComponent和Component2都调用getAccount().subscribe()两次.

使用share(),Chrome开发人员工具“网络”标签显示一个针对data.json的HTTP请求.随着share()被注释掉,有4个请求.

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...