2016-11-14 5 views
0

ich den folgenden Code haben:mit rxjs Umgang Observablen Logik

Observable.combineLatest(
    this.data.getPersonalData(myfilter), 
    this.peopleService.selectedPerson, 
).subscribe(([data, person]) => { 
    this._data = data; 
    if (this._data.length) { 
     this.infoService.getInfo(
      person.id 
     ) 
     .subscribe(res => { 
      this.handleInfo(res); 
     }); 
    } 
}); 

Observable.combineLatest(
    this.data.getPersonalData(myfilter), 
    this.sectionService.selectedSection 
).subscribe(([data, section]) => { 
    this.filterbySection(s); 
}); 

Ich versuche, das Szenario zu erklären:

Zuerst haben wir alle personal erhalten von myfilter gegeben verfügbar. Okey, so jetzt, gegeben selectedPerson erhalten wir alle Informationen für eine Person, und handleInfo verbindet diese Informationen für eine Gruppe von Objekten in data. Aber die Sache ist, wenn es fertig ist, möchte ich filterbySection, wenn ich eine selectedSection habe.

Ich weiß, ich this.sectionService.selectedSection im ersten combineLatest setzen kann, aber jedes Mal, wenn der Benutzer den Abschnitt, wird es die infoService ging in die Datenbank laufen und alle Infos zu bringen, ich dieses Verhalten nicht brauchen. Ich muss getInfo ausführen, wenn ich eine Person auswähle, handle diese Info Zuordnung zu _data, und dann nach Abschnitt die ganze Sache "info + data" filtern, jedes Mal, wenn der Benutzer auf einen neuen Abschnitt klickt.

Antwort

0

Ich bin mir nicht sicher über diese Lösung. Aber ich konnte eine EventEmitter für info, schaffen so ist, dann kann ich den personalInfo abonnieren, und in der zweiten combineLastest hätte ich so etwas wie:

Observable.combineLatest(
    this.infoService.selectedInfo, 
    this.sectionService.selectedSection 
).subscribe(([info, section]) => {this.filterBySection(info, section)}); 
Verwandte Themen