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;
});
});
city
包含country
个信息作为Observable
数据。因此,如果我将city
作为navParam
传递到另一个页面,只需this.navCtrl.push(AnotherPage, {city: city})
,我就无法在AnotherPage
上获取国家/地区信息。
我刚刚在这里添加了演示:https://stackblitz.com/edit/ionic-firestore。
欢迎任何想法。
答案 0 :(得分:2)
原因是当您将city
传递给ContactPage
时,country Observable
将不会再次发送数据。我们来详细看看。您的情况:
首先,您将cities
定义为Observable
。当cities
获取数据时,它会显示在模板中,并在点击功能中捕获city
对象。请注意,city
是对象,而不是Observable
,因此您可以直接使用同步。这就是city.name
在两页中都显示的原因。
第二次,您将city.county
定义为Observable
,然后通过async
绑定在模板中显示它。在此步骤中,您订阅 Observable
,firebase服务将向您发送您想要的数据,除非您的数据库发生任何变化,否则永远不会再发送。
最后,您将city
对象发送到ContactPage
。 city.country
仍然是相同的Observable ,如上所述,除非您的数据库有任何更改,否则无法获取数据。只需编辑您的数据库,您就可以在控制台日志中查看该国家/地区
因此,通过将Observable
再次设置为firebase city.country
,解决方案仅在2页中使用2个不同的Observable
。我猜你确实找到了它并在ContactPage
中发表评论
如果您有任何疑问,请随时提出。
答案 1 :(得分:0)
您的国家/地区集合是否设置正确?当我移动
#include <algorithm>
#include <iostream>
#include <string>
int main()
{
std::string str = "Hello, World!";
std::reverse(str.begin(), str.end());
std::cout << str << std::endl; // Prints "!dlroW ,olleH"
}
进入onItemClick()事件,它也永远不会从.subscribe返回。
*更新*
在HomePage上删除国家/地区的显示,它工作正常。问题似乎是您不能多次订阅Firestore observable。即它不会重新运行查询,它只会让您等待下一个永远不会来的项目。