关于angular:AngularFire2-.valueChanges()不返回我的数据

AngularFire2 - .valueChanges() does not return my data

我是AngularFire + Firebase的新手,我正尝试从angularfire2 github上完成本教程。

当我执行此代码时:

1
2
3
4
items: Observable;
  constructor(db: AngularFireDatabase) {
    this.items = db.list('items').valueChanges();
}

并在控制台中打印变量this.items,它将下面的句子显示为值(我已经):

1
2
3
4
5
6
7
8
9
10
11
12
13
Observable {_isScalar: false, source: Observable, operator: MapOperator}
operator
:
MapOperator {project: ?, thisArg: undefined}
source
:
Observable {_isScalar: false, _subscribe: ?}
_isScalar
:
false
__proto__
:
Object

我的问题是,数据库中的数据在哪里? 我已经创建了一个包含一些数据的数据库来执行此操作,但是节点" items"中的任何内容均未返回。

提前致谢

我的firebase结构:

1
2
3
4
5
6
7
8
9
10
11
12
{
   "items": {
       "1": {
           "code":"C001",
           "name":"client test"
        },
       "2": {
           "code":"C002",
           "name":"client test 2"
        }
    }
}

编辑:

我的进口:

零件:

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

NgModule:

1
2
3
4
AngularFireModule.initializeApp({
      // data from firebase
    }),
    AngularFireDatabaseModule

我正在使用Firebase实时数据库


解决

rxjs版本存在问题。 我更新到6.2.0版本,并且代码起作用了:)


首先,您无需在构造函数中查询。 使构造函数保持简单,并使用生命周期挂钩或您自己的方法。

如我所见,items是可观察的。 但是您没有订阅。 您需要订阅items,或者可以在模板中使用async管道。 数据将随着时间的推移而解析。

在您的课程中:

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

或在模板中:

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


尝试使用snapshotChanges()

What is it? - The current state of your collection. Returns an Observable of data as a synchronized array of DocumentChangeAction[].

1
2
3
4
5
6
7
8
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