Angular2 Http双重订阅

时间:2016-02-14 20:38:44

标签: typescript angular angular2-http

是否可以两次调用 <header> <div class="container"> <div class="row"> <div class="col-lg-12"> <img class="img-responsive" src="img/profile.png" alt=""> <div class="intro-text"> <span class="name">HEADING</span> <hr class="star-light"> <span class="skills">TEXT</span> </div> </div> </div> </div> </header>方法?

我正在尝试构建api工厂,它在工厂中保存数据,但每个ajax调用可以由不同组件使用该数据。

工厂

Subscribe

测试组件,再次调用export class api { result = []; constructor (protected http: Http) { } getData () { return this.http.get('./friends.json').map((res: Response) => res.json()).subscribe(res => this.result = res); } } 方法

subscribe

2 个答案:

答案 0 :(得分:3)

您可以返回新的Observable包装器。这样的事情应该有效:

import {Observable} from 'rxjs/Observable'

export class api {

    result = [];

    constructor (protected http: Http) { }

    getData () {
        return new Observable(observer => {
            this.http.get('./friends.json')
                .map((res: Response) => res.json())
                .subscribe(res => {
                    this.result = res;
                    observer.next(res);
                    observer.complete();
                });
        });
    }
}

答案 1 :(得分:3)

如果你想一次发出HTTP请求,并将结果分享给多个订阅者,那么我建议使用一个可连接的观察者来发布和重放最后发出的值:

this.observable = http.get('...').map(t=> t.json()).publishReplay().refCount();

每个新订阅者都将重放最后发出的值,而不会发出新的HTTP请求。

Demo Plnkr

此答案与此SO question and answer类似。