2017-02-22 67 views
0

考慮以下幾點:壓扁嵌套訂閱

this.activatedRoute.parent.params 
    .subscribe(params => { 
    let foo = +params['fooId']; 

    this.activatedRoute.params 
     .switchMap(params => this.fooBarService.getFooBars(fooId, +params['barId'])) 
     .subscribe(fooBars => { 
     this.fooBars = fooBars; 
     }); 
    }); 

但有可能變平剩餘的嵌套訂閱:

this.activatedRoute.parent.params 
    .subscribe(params => { 
    let fooId = +params['fooId']; 

    this.activatedRoute.params 
     .subscribe(params => { 
     let barId = +params['barId']; 

     this.fooBarService.getFooBars(fooId, barId) 
      .subscribe(fooBars => { 
      this.fooBars = fooBars; 
      }); 
     }); 
    }); 

嵌套的部分可以用下面的簡化?

+1

使用該訣竅的combineLatest操作 –

+0

感謝@JBNizet。 – hdk

回答

0

使用combineLatest操作:

Observable 
    .combineLatest(this.activatedRoute.parent.params, this.activatedRoute.params) 
    .switchMap(data => this.fooBarService.getFooBars(+(data[0])['fooId'], +(data[1])['barId'])) 
    .subscribe(fooBars => { 
    this.fooBars = fooBars; 
    });