14
cities: Observable<any>; 


this.cities = this.fsProvider.collection('cities').map(cities => { 
    return cities.map(city => { 
     city.country = this.fsProvider.doc(`countries/${city.country_id}`); 
     return city; 
    }); 
}); 

cityObservable 데이터로 country 정보를 포함 작동하지 않습니다. 따라서 다른 페이지로 citynavParam으로 보내면 this.navCtrl.push(AnotherPage, {city: city}) 만 입력하면 AnotherPage에 대한 국가 정보를 얻을 수 없습니다.경우 FireStore : 전달 angularfire2 비동기 데이터 이온으로 3 navParams는

방금 ​​데모를 추가했습니다 : https://stackblitz.com/edit/ionic-firestore.

모든 의견을 환영합니다.

+0

내 생각은 실제 개체를 저장하기 위해 관찰 가능한 국가를 평평하게 만드는 것입니다. – Sasuke91

답변

0

국가 컬렉션이 올바르게 설정 되었습니까? 내가 옮겼을 때

if (this.city) { 
     this.city.country.subscribe((country) => { 
     console.log(country); 
     },() => { 
     console.log('finished'); 
     }, (error) => { 
     console.log(error); 
     }); 
    } 

onItemClick() 이벤트에는 .subscribe도 반환되지 않았습니다.

* 업데이트 *

홈페이지에 나라의 표시를 제거하고 잘 작동합니다. 문제는 Firestore를 한 번 이상 관찰 할 수 없다는 것입니다. 즉, 쿼리를 다시 실행하지 않아서 결코 제공되지 않는 다음 항목을 기다리게됩니다.

+0

물론 홈 페이지에 올바르게 나열되어 있습니다. – sdey0081

+0

한 번 더 테스트하고 문제를 밝힙니다. HomePage에서 국가의 표시를 제거하고 잘 작동합니다. 문제는 Firestore를 한 번 이상 관찰 할 수 없다는 것입니다. 즉결코 다시 오지 않는 다음 항목을 기다리는 쿼리를 다시 실행하지 않습니다. 그것은 완벽한 솔루션 아니에요, – joelm

+0

올바른 (나는. 단지 미래의 시청자에 대한 내 대답을 편집 할 수 있습니다)하지만, 당신이 해결 방법을 파악하고 분명히 올바른 방향을 지적 할 수 있습니다 실패의 지점을 가리 킵니다. '올바른'대답 일 필요는 없지만, 왜 당신 (또는 누군가)이 투표를했는지 확신 할 수 없습니다. 우리가 간다. :) – joelm

2

cityContactPage으로 전달한 이유는 country Observable이 다시 데이터를 보내지 않기 때문입니다. 자세히 살펴 봅시다. 사용자 시나리오 :

처음으로으로 citiesObservable으로 정의했습니다. cities이 데이터를 가져 오면 템플릿에 표시되고 클릭 기능에서 city 개체를 잡습니다. city개체 인이 아니며 Observable이 아니므로 직접 사용할 수 있으며 동기식입니다. 두 페이지 모두에 city.name이 표시되는 이유입니다.

두 번째으로 city.countyObservable으로 정의한 경우 템플릿에 async 바인딩으로 표시합니다. 이 단계에서 Observable 구독하면 firebase 서비스에서 원하는 데이터를 보내고 데이터베이스에 변경 사항이없는 한 다시 보내지 않습니다.

마지막으로 city 개체를 ContactPage으로 보냅니다. city.country은 여전히 ​​입니다. Observable은이며 위에서 말했듯이 데이터베이스에 변경 사항이없는 한 데이터를 가져올 수 없습니다. 데이터베이스를 편집하면 콘솔 로그에서 해당 국가를 볼 수 있습니다.

따라서 해결책은 2 페이지에서 Observable을 사용하는 것입니다. city.country을 다시 firebase Observable으로 설정하십시오. 실제로 당신이 그것을 발견하고 ContactPage에 댓글을 달았습니다.
질문이 있으시면 언제든지 문의하십시오.