AngularFire2 - .valueChanges()不返回我的数据

时间:2018-05-24 03:37:43

标签: angular ionic-framework angularfire

我是AngularFire + Firebase的新手,我正试图从angularfire2 github做这个教程。

当我执行此代码时:

items: Observable<any[]>;
  constructor(db: AngularFireDatabase) {
    this.items = db.list('items').valueChanges();
}

在控制台中打印变量this.items,将下面的句子显示为值(I&#39; ve):

Observable {_isScalar: false, source: Observable, operator: MapOperator}
operator
:
MapOperator {project: ƒ, thisArg: undefined}
source
:
Observable {_isScalar: false, _subscribe: ƒ}
_isScalar
:
false
__proto__
:
Object

我的问题是,数据库中的数据在哪里?我已经创建了一个包含一些数据的数据库来执行此操作,但是没有任何来自节点&#39;项目&#39;归还。

提前致谢

我的火力架结构:

{
    "items": {
        "1": {
            "code": "C001",
            "name": "client test"
        },
        "2": {
            "code": "C002",
            "name": "client test 2"
        }
    }
}

编辑:

我的进口商品:

组件:

import { AngularFireDatabase, AngularFireList } from 'angularfire2/database';
import { Observable } from 'rxjs';

NgModule:

AngularFireModule.initializeApp({
      // data from firebase
    }),
    AngularFireDatabaseModule

我正在使用Firebase实时数据库

解决

这是rxjs版本的问题。我更新到6.2.0版本,代码工作:)

2 个答案:

答案 0 :(得分:1)

首先,您不要在构造函数内部进行查询。保持构造函数简单并使用生命周期钩子或您自己的方法。

我可以看到,items是一个Observable。但你没有订阅它。您需要订阅items,或者您可以在模板中使用async管道。数据将随着时间的推移而得到解决。

在你班上:

this.db.collection("items")
  .valueChanges()
  .subscribe(res => {})

或在模板中:

<some-component *ngFor="let item of items | async"></some-component>

答案 1 :(得分:0)

尝试使用snapshotChanges()

  

这是什么? - 您收藏的当前状态。作为DocumentChangeAction []的同步数组返回一个Observable数据。

this.db
  .collection("azucar_nacional")
  .snapshotChanges()
  .subscribe(e => {
    e.forEach(elem => {
      console.log(elem.payload.doc.data());
    });
  });

https://github.com/angular/angularfire2/blob/master/docs/firestore/collections.md