如何在Angular 4中执行订阅到另一个订阅?

时间:2017-08-13 15:25:09

标签: angular typescript

我想我的问题有一个非常简单的解决方案,但我找不到。 我想写第二个订阅的值

 export class ArticleDetailComponent implements OnInit  {

  private  articleID: any;
  public   detailArticle: any ;


  constructor( private route: ActivatedRoute , private _articlesService: ArticlesService ) {
  }

  ngOnInit () {
     this.route.params.subscribe( (params) => {
      this.articleID = params['id'];
       this._articlesService.getArticle(this.articleID).subscribe( article => this.detailArticle = article );
     }
    );
  }
}

我想将第二个订阅的值写入“detailArticle” 但是因为我已经打电话给一个订阅,我认为请求和他们到达的时间有所不同。 在价值中它记录了一个“未定义的” 当其中一个订阅者进入另一个时,我如何同步两个订阅()? 我的想法是设置结果值detailArticle所以我可以在模板中使用它。

1 个答案:

答案 0 :(得分:1)

您正在寻找的是rxjs的switchMap运算符(请参阅其文档here):

this.route.params
          .do(params => this.articleID = params['id'])
          .switchMap(
            params => this._articlesService.getArticle(this.articleID)
          )
          .subscribe( article => this.detailArticle = article );

简单来说,它会使你的params可观察并启动一个新的observable来获取你的文章,结果会合并回原始的observable,因此可以在你的订阅中使用。