Firestore:将 angularfire2 异步数据传递为 Ionic 3 navParams 不起作用

Posted

技术标签:

【中文标题】Firestore:将 angularfire2 异步数据传递为 Ionic 3 navParams 不起作用【英文标题】:Firestore: Passing angularfire2 async data as Ionic 3 navParams not working 【发布时间】:2018-05-12 04:00:05 【问题描述】:
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。

欢迎提出任何想法。

【问题讨论】:

我的想法是把可观察的国家扁平化来存放实物。 【参考方案1】:

原因是当您将city 传递给ContactPage 时,country Observable 将不会再次发送数据。让我们详细看看。您的场景:首先,您将cities 定义为Observable。当cities 获取数据时,它会显示在模板中,您可以在点击函数中捕获city 对象。请注意,city 是一个对象,而不是Observable,因此您可以直接同步使用它。这就是city.name 在两个页面中都显示的原因。第二,您将city.county 定义为Observable,然后通过async 绑定在模板中显示它.在此步骤中,您将订阅Observable,firebase 服务将向您发送您想要的数据并且永远不会再次发送,除非您的数据库发生任何变化。最后,您将city 对象发送到ContactPagecity.country 仍然是 same Observable,正如我上面所说,除非数据库发生任何变化,否则您无法获取数据。只需编辑您的数据库,您就可以在控制台日志中看到国家/地区。 因此,解决方案只是在 2 页中使用 2 个不同的 Observable,方法是将 city.country 再次设置为 firebase Observable。我猜你确实找到了它并在ContactPage 中评论它。 如果您有任何问题,请随时提出。

【讨论】:

【参考方案2】:

您的国家收藏设置是否正确?当我移动

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

进入 onItemClick() 事件,它也从未从 .subscribe 返回。

* 更新 *

在主页上删除国家/地区的显示,它可以正常工作。问题似乎是您不能多次订阅 Firestore observable。即它不会重新运行查询,它只会让您等待下一个永远不会出现的项目。

【讨论】:

再次测试并发现问题。删除主页上的国家/地区显示,它工作正常。问题似乎是您不能多次订阅 Firestore observable。即它不会重新运行查询,它只会让您等待下一个永远不会出现的项目。 (我会为未来的观众编辑我的回复。) 正确,这不是一个完整的解决方案,但它会为您指出故障点,让您找出解决方法并显然为您指明了正确的方向。它不需要是“正确”的答案,但我不确定你(或某人)为什么投反对票。我们走吧。 :)

以上是关于Firestore:将 angularfire2 异步数据传递为 Ionic 3 navParams 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

angularfire2:未启用 Cloud Firestore API

使用 Firestore/Angularfire2 或 Firestore SDK 查询集合中的内部对象 ID

AngularFire2 firestore take(1) on doc valueChanges

使用 ionic 3 中的 Angularfire2 从 Firestore 获取集合文档的 ID [重复]

typescript 用于AngularFire2的角度Firebase模块样板(使用Firestore和存储)NgModule

NullInjectorError:InjectionToken angularfire2.app.options 没有提供程序