2

항목 순서에서 모든 항목을 가져와야한다고 가정합니다.looping anglefire2 목록

  • 나는 각 항목의 키를 통해 순서
  • 으로 반복에서 항목 키를 얻고 항목 세부 정보를 얻기 위해 각 .database.object에 가입해야합니다. orderItems 가입이 아직 완료되지이며, forEach이 실행되기 때문에

let myItems = []; 
let orderItems = this.af.database.list('/order_items'); 

this.orderItems.subscribe((itemKeys) => { 
    itemKeys.forEach((itemKey) => { 
    let item = this.af.database.object('/items/'itemKey.$value); 

    item.subscribe((itemData) => { 
     myItems.push(itemData); 
    }); 

    }); 
}); 

이 문제가 될 수 있습니다. Ofcourse는 나중에 중복 된 목록을 확인할 수 있지만 더 나은 방법이 있다는 것을 확신합니다.

내 질문 - 더 좋은 방법이 있습니까?

답변

2

여기서 설명한대로 preserveSnapshot 옵션을 지정하면 원래 스냅 샷으로 데이터를 얻을 수 있다고 생각합니다. Retrieving the snapshot 그런 다음 필요에 따라 반복합니다.

let myItems = []; 
let orderItems = this.af.database.list('/order_items', 
    { preserveSnapshot: true } 
); 

this.orderItems.subscribe((itemKeys) => { 
    itemKeys.forEach((itemKey) => { 
    let item = this.af.database.object('/items/'+itemKey.key); 

    item.subscribe((itemData) => { 
     myItems.push(itemData); 
    }); 
    }); 
}) 

난 당신도 바로 여기에 같은 order_items의 열쇠로 items를 매핑 할 수 있다고 생각 : AngularFire for Angular 2를,하지만 난 NG2, AF2 및 중포 기지에 새로운 오전 있기 때문에 나는이 작업을 수행하는 방법을 모르겠습니다.

+0

'preserveSnapshot'은 무엇을하는지 모르지만 문제는 남아 있습니다. 관측 가능한 스트림이 좋지 않기 때문에이 문제가 발생한다고 생각합니다. – TheUnreal