3

基本上,我有一个包含元素列表的组件,还有一个详细信息组件,您可以在其中编辑或添加新元素。

在我通过 http 服务(this.myservice 基于文档https://angular.io/docs/ts/latest/tutorial/toh-pt6.html中的 hero.service.ts )向我的服务器添加一个元素之后。然后我直接跳回元素组件列表。

我使用 Zone,以便调用 ngOnInit。Angular 2 ngOnInit 未调用

问题是元素列表通常还没有用新元素更新。我想异步 HTTP 请求的顺序搞混了。

一个好的解决方案应该是什么样子的?

export class DetailElemComp {
    this.myService.addElem(this.elem)
      .subscribe(
        error => this.errorMessage = <any>error);
    this.zone.run(() => this.router.navigate(['ListComponent']));
}
export class ListOfElemComp {
    ngOnInit() {
        this.myService.getElems()
          .subscribe(
            elems => this.elems = elems,
            error => this.errorMessage = <any>error);
    }
}
4

1 回答 1

4

好吧,就像你说的,这是一个异步请求。因此,如果您想在请求完成后做某事,我建议将该逻辑移动到函数的onCompleted回调 lambda 中,subscribe如下所示:

export class DetailElemComp {
    this.myService.addElem(this.elem)
      .subscribe(
        data => null,
        error => this.errorMessage = <any>error,
        () => this.zone.run(() => this.router.navigate(['ListComponent']))
      );
}

subscribe否则,该调用下方的代码将在方法内部的回调执行之前运行subscribe

于 2016-06-27T22:12:21.740 回答