【发布时间】:2016-12-19 00:00:02
【问题描述】:
使用 ngFor 流式传输/呈现 Firebase 查询结果的简洁方式是什么?我的理解是,带有异步管道的 ngFor 可以自动呈现对 Firebase 查询结果的任何更改(如果编写为 observable)。
以下代码产生此错误:找不到类型为“object”的不同支持对象“[object Object]”。 NgFor 只支持绑定到 Arrays 等 Iterables。
这个错误是有道理的,因为 observable 没有返回对象数组。
模板:
<div *ngFor="let wishlist of wishlists | async">
<div>{{wishlist}}</div>
</div>
组件:
this.wishlists =
Observable.fromPromise(
firebase.database().ref('wishlists').once('value')
);
将组件代码更改为以下至少会呈现但不是自动更新流。
this.wishlists =
new Promise((resolve, reject) => {
firebase.database().ref('wishlists/').on("value", function (snapshot) {
var wishlists = new Array(snapshot.numChildren());
for (let data in snapshot) {
let data = snapshot.val();
let wishlist = new Wishlist(snapshot.key);
wishlists.push(wishlist);
}
resolve(wishlists);
});
是否有必要创建一个 Observable 例如
return Observable.create(observer => {
let listener = ref.on('value', snapshot => {
let data = snapshot.val();
let wishlist: Wishlist;
if (data != null) {
wishlist = new Wishlist(snapshot.key);
}
observer.next(wishlist);
// observer.complete(); // How do we know when complete or do we have to keep the stream open indefinitely?
}, observer.error);
return () => {
ref.off('value', listener);
}
});
【问题讨论】:
标签: angular firebase firebase-realtime-database ionic2