Angular2 - 我应该如何将错误从服务传递给组件?

时间:2017-03-15 01:34:04

标签: angular typescript rxjs

我正在尝试从我的服务中返回一条错误消息,该消息对我的显示数据的组件进行API调用。

我的服务获得如下数据:

getResults(searchurl: string): Observable<IPageSpeedResult> {

    return this._http.get(pageSpeedApiUrl)
        .map((response: Response) => this.buildResult(response.json()))
        .do(data => console.log(data))
        .catch((err:Response) => this.handleError(err));
}

我发现这个答案谈到了如何做到这一点:

Delegation: EventEmitter or Observable in Angular2

所以我将这些属性添加到我的服务中:

private _errorReplaySource : ReplaySubject<string> = new ReplaySubject<string>()
public errorReplay : Observable<string> = this._errorReplaySource.asObservable();

然后在我的错误处理方法中,我在_errorReplaySource

上调用了next()
private handleError(error: Response) {

    this._errorReplaySource.next("There was an error retreiving data for that URL.  Please check it is correct and try again.")

    return Observable.throw(error.json().error || 'Server error');

}

然后在我的组件中,我给它添加了一个属性:

ngOnInit(): void {

    this._errorSub = this._pageSpeedService.errorReplay.subscribe(error => this.errorMessage = error);

    Observable.combineLatest(
        this._pageSpeedService.getMessageData(),
        this._pageSpeedService.getResults(this.testUrl)
    ).subscribe(
        results => {
            this.messageData = <TestResultMessageLogic[]>results[0];
            this.testResults = results[1];
            this.processApiResponse(this.testResults, this.messageData);
        }
    )
}

在我的模板中,我正在使用{{errorMessage}},但是当发生错误时,消息未被传递。我想知道我是否是正确的技术以及我做错了什么。

有人可以提供一些建议或传递错误信息的简单示例吗?

0 个答案:

没有答案