2017-04-05 1 views
0

Observable을 반환하는 getAlgemeneInfo() 메소드가있는 'AlgemeneInfoService'가있는 Angular 2 응용 프로그램이 있습니다.RxJS는 두 스트림을 결합하여 두 번째 값을 호출합니다.

각도 축소/저장소를 사용하여 'Dossier'및 'Verpleegperiode'개체가있는 저장소가 있는데 둘 다 AlgemeneInfoService가 'AlgemeneInfo'개체를 가져 오는 데 사용하는 ID가 있습니다. 나는 AlgemeneInfoService를 호출하여 갱신해야 ActiveAlgemeneInfo을 넣어려고

합니다 (VerpleegperiodeId이 널 (null) 일 수있다) 때 국가 개체 중 서류 또는 Verpleegperiode의 상태가 변경 객체.

ActiveAlgemeneInfo 상태 객체 등록이 설정된 'selectedAlgemeneInfo'리턴이 등록을 처리하고 방법 getActiveAlgemeneInfo을 (갖는 ActiveAlgemeneInfoService)을 이용 하였다 내 계획 : 생성자에서

@select(state => state.dieet.activeAlgemeneInfo) 
private activeAlgemeneInfo$: Observable<AlgemeneInfo>; 

Observable.combineLatest(
    this.activeInfohosVerpleegperiode$, 
    this.activeInfohosDossier$ 
) 
.distinctUntilChanged() 
.subscribe(([v, d]) => { 
    const verpleegperiodeId = v != null ? v.verpleegperiodeId : null; 
    const dossierId = d.dossierId; 
    console.log(`vp id: ${verpleegperiodeId} - d id: ${dossierId}`); 
    this._setActiveAlgemeneInfo(dossierId, verpleegperiodeId); 
}); 

this.activeAlgemeneInfo$.subscribe(algemeneInfo => this.selectedAlgemeneInfo = algemeneInfo); 

그리고 서비스에, 나는 또한 방법이있어 :

을 서비스, 나는 구독을 설정
private _setActiveAlgemeneInfo = (dossierId: number, verpleegperiodeId: number) => { 
this._algemeneInfoService 
    .getAlgemeneInfo(dossierId, verpleegperiodeId) 
    .subscribe(algemeneInfo => this._dieetActions.selectAlgemeneInfo(algemeneInfo)); 
} 

이 서비스가 구축되면 및 방법 getActiveAlgemeneInfo()가 호출됩니다 내가)합니다 (Observable.combineLatest을 CONSOLE.LOG 때 서류 및 Verpleegperiode가있는 동안

public getActiveAlgemeneInfo =(): Observable<AlgemeneInfo> => { 
    return this.activeAlgemeneInfo$; 
} 

을 그냥, HTTP 요청을 스팸 메일 이전 요청과 정확히 동일합니다.

어떻게 작동합니까? 그것은 "깊은"비교을하지 않기 때문에 그것은 단지 참조를 비교 - -

답변

0

당신은 distinctUntilChanged 이동해야하고 combineLatest이 항상 새로운 배열 될 것입니다.

Observable.combineLatest(
    this.activeInfohosVerpleegperiode$, 
    this.activeInfohosDossier$ 
) 
.distinctUntilChanged(_.isEqual) // from: https://lodash.com/docs/#isEqual 
.subscribe(([v, d]) => { 
:

Observable.combineLatest(
    this.activeInfohosVerpleegperiode$.distinctUntilChanged(), 
    this.activeInfohosDossier$.distinctUntilChanged() 
) 
.subscribe(([v, d]) => { 

은 또한 당신이 그렇게 같은 깊은 비교를 수행 않는 비교-방법을 제공한다 : 그 문제에 도움이된다면

는 다음을 시도하고 참조