Firestore:传递angularfire2异步数据,因为Ionic 3 navParams无效

时间:2017-11-28 16:04:03

标签: angular ionic-framework angularfire2 google-cloud-firestore

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

欢迎任何想法。

2 个答案:

答案 0 :(得分:2)

原因是当您将city传递给ContactPage时,country Observable将不会再次发送数据。我们来详细看看。您的情况:

首先,您将cities定义为Observable。当cities获取数据时,它会显示在模板中,并在点击功能中捕获city对象。请注意,city对象,而不是Observable,因此您可以直接使用同步。这就是city.name在两页中都显示的原因。
第二次,您将city.county定义为Observable,然后通过async绑定在模板中显示它。在此步骤中,您订阅 Observable,firebase服务将向您发送您想要的数据,除非您的数据库发生任何变化,否则永远不会再发送。
最后,您将city对象发送到ContactPagecity.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。即它不会重新运行查询,它只会让您等待下一个永远不会来的项目。