2017-12-13 22 views
4

에는 comments, attachments, images이 첨부되어 있습니다. 모든 항목은 ngrx 상점에서 가져와서 해당 항목이 모두 관찰 가능하다는 것을 의미합니다. 내 질문은 어떻게 그 항목을 결합합니까?observable, ngrx의 최신 버전을 여러 개 결합하십시오

보통 내가하는 일은 사용하는 것입니다 : 관찰의 2 개 세트와

combineLatest(selectProducts, selectProductComments, (products, comments) => { 
    // attach comments to products here 
}) 

그러나 combineLatest 작품과 나는 그들의 4이있다. 그래서 이것에 대해 가장 간단한 방법은 무엇입니까?

그래서 우리는 products의 목록을 표시, 각 제품은로드 팝업에 표시되는 제품에 대한 추가 정보를 클릭 : 여기


더 많은 상황이다. 해당 정보에는 comments, attachmentsimages이 포함되어 있습니다. 이 단계는 DEEP_LOADING 단계라고 할 수 있습니다. 사용자가 제품을 클릭하면 주석, 첨부 파일 및 이미지가 http를 통해로드됩니다.

사용자는 새 이미지, 주석 또는 첨부 파일을 추가 할 수도 있습니다. 그가 그렇게하면 pending 상태로 설정된 comment이 주석 목록에 추가됩니다. http 요청이 해결되면이 comment 보류 등록 정보가 false로 설정됩니다.

사용자가 팝업을 닫고 새 제품을 열면 새로운 comments, attachmentsimages이로드됩니다. 이 시간에 그는 팝업을 닫고 처음 열었던 것을 열고, 표시되는 comments은 백엔드에서로드 된 것 (이전과 동일)뿐만 아니라 보류중인 주석 (있는 경우)도 있습니다.

코멘트 감속기는 다음과 같이 보일 수 있습니다. (나는 상점을 표준화하는 과정에 있기 때문에 의견을 말할 수 있습니다. 의견은 현재 제품의 일부이므로 보류 상태에 신경 쓸 필요가 없습니다. 물건 ..)

export function commentReducer(state, action) { 
    switch (action.type) { 
     case 'SET_COMMENT': 
      // when we set we have to keep the pending comments, 
      // so when we open another product, then switch back to the original one 
      // if the pending comment is still pending it should display as pending 
      const newState = state.filter((c: AppComment) => c.pending); 
      newState.push(action.payload); 
      return newState; 
     case 'CLEAR': 
      return initialState; 
    } 
} 
+4

combineLatest. 원하는만큼 많이 전달할 수 있습니다. – Maxime

+0

또 한 방아쇠를 당기거나 관측 가능 상태를 유지하려고합니까? combineLatest는 위험 할 수 있기 때문에. withLatestFrom을 살펴보고 필요에 맞는 것이 있다면이 것을 사용하는 것이 좋습니다. (당신이 모른다면, 더 많은 컨텍스트를 제공하십시오) – Maxime

+0

@Maxime 좀 더 많은 컨텍스트를 추가했습니다. 원하는 컨텍스트 유형입니까? – Ced

답변

2

combineLatest는 X 인수를 취할 수 있습니다. 원하는만큼 많이 전달할 수 있습니다. 예를 들어

: X 인수를 취할 수

combineLatest(v1$, v2$, v3$, v4$, (v1, v2, v3, v4) => { 
    console.log(v1, v2, v3, v4); 
})