0

내 ionic2 앱에서 가장 가까운 장소 (바, 레스토랑 등) 정보가 실시간으로 업데이트되는 목록을 표시해야합니다. GeoFire doc을 읽으면서 트리에서 위치와 장소 세부 정보 데이터를 분리해야합니다. 그래서 내 중포 기지에서 다음과 같습니다지오 파이어 및 파이어베이스 및 앵귤러 파이어로 쿼리

-geoplacesdata 
    -placeID1 
     -g:"spdxm88qvr" 
     -l 
     -0: 43.4658582 
     -1: 3.7578978000000234 
    -placeID2 
     -g:"spdxm88qvr" 
     -l 
      -0: 45.4658582 
      -1: 4.7578978000000234 

-places_details 
    -placeID1 
     -rate: 2 
     -name: "Place 1" 
     -infos:"Free cocktail" 

    -placeID2 
     -rate: 3 
     -name: "Place 2" 
     -infos:"Free for kids" 

사용자가 내가 자신의 위치를 ​​얻을 GeoFire와 나는 그의 지역 근처에 각 placeID을 얻을 수있어 페이지를로드 할 때. 꽤 멋진데 이제는 매우 까다로워졌습니다 ... 이제 모든 장소 ID를 얻었으므로이 장소에 대한 모든 세부 정보를 표시하고 각 선택된 장소 ID의 "정보"하위 항목에서 발생하는 모든 업데이트를 구독하고 싶습니다

그것은 작동

geoQuery.on("key_entered", (key) => { 
placesRef.child(key).on("value", (snapshot) => { 
var placesDetails = snapshot.val(); 
// .. and push each places details snapshot in an array named "matches" 
this.matches.push(placesDetails); 
}); 
}); 

, 내가 선택한 placesID에 대한 모든 장소 정보를 얻을하지만 곧 장소가 업데이트 될 때 : 새 키가에 밀려 (예 : 아이를 "정보를 정기적으로는"업데이트입니다) 나는 것을 시도 배열과 중복 된 정보를 얻습니다.

이보다 다른 솔루션이 있습니까?

+0

안녕 Fank, 내가 물어 모든 질문에, 나는 당신이 내 질문을 수정하지만 난 당신에게서 어떤 대답을 결코 볼 수 ...하지만 당신이 geofire에 대한 몇 가지 기술을 가지고 (나는 다른 게시물을보고) 보인다. 어쩌면 당신은 저를 도울 수있을 것입니다 .. –

+0

이것은 특별히 GeoFire와 관련이 없습니다. 배열에서 중복 된 결과를 얻는 이유는 모든 변경에 대해 배열에 새 데이터를 밀어 넣기 때문입니다. – eikooc

답변

0

이 문제를 해결하려면 배열에 고유 항목 만 삽입해야합니다. 키가 key_entered 이벤트를 발생시킬 때마다 해당 데이터를 배열로 푸시하지만 이미 있는지 여부를 확인해야합니다.

if (this.matches.findIndex((x) => x.$key === placesDetails.$key) === -1) { 
    this.matches.push(placesDetails) 
}