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 की जानकारी भी शामिल है। तो अगर मैं city को navParam के रूप में किसी अन्य पृष्ठ पर पास करता हूं, तो बस this.navCtrl.push(AnotherPage, {city: city}), मुझे AnotherPage पर देश की जानकारी नहीं मिल सकती है।Firestore: आयोनिक के रूप में पासिंग angularfire2 async डेटा 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 से लौट आए।

* अद्यतन *

मुखपृष्ठ पर देश के प्रदर्शन निकालें और इसे ठीक काम करता है। समस्या यह प्रतीत होती है कि आप एक से अधिक बार देखे जा रहे फायरस्टोर की सदस्यता नहीं ले सकते हैं। यानी यह क्वेरी को दोबारा नहीं चलाता है, यह आपको अगले आइटम की प्रतीक्षा करने के लिए छोड़ देता है जो कभी नहीं आता है।

+0

निश्चित रूप से, वे होम पेज पर सही तरीके से सूचीबद्ध हैं। – sdey0081

+0

एक और परीक्षण और समस्या को उजागर किया। होमपेज पर देश के प्रदर्शन को हटाएं और यह ठीक काम करता है। समस्या यह प्रतीत होती है कि आप एक से अधिक बार देखे जा रहे फायरस्टोर की सदस्यता नहीं ले सकते हैं। अर्थात।यह क्वेरी को दोबारा नहीं चलाता है, यह आपको अगले आइटम की प्रतीक्षा करने के लिए छोड़ देता है जो कभी नहीं आता है। (मैं सिर्फ भविष्य के दर्शकों के लिए अपनी प्रतिक्रिया संपादित करूंगा।) – joelm

+0

सही, यह एक पूर्ण समाधान नहीं है, लेकिन यह आपको विफलता के बिंदु पर इंगित करता है जो आपको कामकाज को समझने देता है और स्पष्ट रूप से आपको सही दिशा में इंगित करता है। इसे 'सही' उत्तर होने की आवश्यकता नहीं है, लेकिन मुझे यकीन नहीं है कि आपने (या किसी) ने इसे क्यों वोट दिया है। हम जाते हैं :) – joelm

2

कारण यह है कि जब आप city से ContactPage पास करते हैं, तो country Observable डेटा फिर से नहीं भेजेगा। आइए विस्तार से देखें। आपका परिदृश्य:

पहले, आपने cities को Observable के रूप में परिभाषित किया है। जब cities डेटा प्राप्त होता है, तो यह टेम्पलेट में दिखाया गया है और आप क्लिक फ़ंक्शन में city ऑब्जेक्ट को पकड़ते हैं। ध्यान दें कि cityऑब्जेक्ट है, Observable नहीं है, तो आप इसे सीधे और सिंक्रनाइज़ का उपयोग कर सकते हैं। यही कारण है कि city.name दोनों पृष्ठों में दिखाया गया था।

दूसरा, आपने city.county को Observable के रूप में परिभाषित किया है, तो आप इसे async बाध्यकारी द्वारा टेम्पलेट में दिखाएं। इस चरण में, आप Observable सदस्यता ले रहे हैं और फायरबेस सेवा आपको वह डेटा भेज देगा जो आप चाहते हैं और जब तक आपके डेटाबेस में कोई बदलाव न हो जाए तब तक इसे दोबारा नहीं भेजेगा।

अंत में, आप city ऑब्जेक्ट ContactPage पर भेजें। city.country अभी भी समान अवलोकननीय है और जैसा कि मैंने उपरोक्त कहा है, तब तक आप डेटा नहीं प्राप्त कर सकते हैं जब तक कि आपके डेटाबेस में कोई बदलाव न हो। बस अपना डेटाबेस संपादित करें और आप देश को कंसोल लॉग में देख सकते हैं।

तो, समाधान city.country को फायरबेस Observable पर फिर से सेट करके 2 पृष्ठों में 2 अलग Observable का उपयोग कर रहा है। मुझे लगता है कि आपको वास्तव में यह मिला और ContactPage में टिप्पणी की।
यदि आपके कोई प्रश्न हैं, तो बेझिझक पूछें।

संबंधित मुद्दे