2017-02-22 69 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; 
    });