【问题标题】:AngularFire2 - .valueChanges() does not return my dataAngularFire2 - .valueChanges() 不返回我的数据
【发布时间】:2018-11-03 03:52:11
【问题描述】:

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

当我执行此代码时:

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

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

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

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

提前致谢

我的火力基地结构:

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

编辑:

我的进口:

组件:

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

Ng 模块:

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

我正在使用 Firebase 实时数据库


已解决

这是 rxjs 版本的问题。我更新到 6.2.0 版本并且代码有效:)

【问题讨论】:

    标签: angular ionic-framework angularfire


    【解决方案1】:

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

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

    在你的课堂上:

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

    或在模板中:

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

    【讨论】:

    • 我已经尝试了这两个选项,但仍然遇到麻烦。使用集合时,我得到这个:“类型 'AngularFireDatabase' 上不存在属性 'collection'。”并且使用模板,我得到这个运行时错误: Object(...) is not a function :(
    • @AlexSantos - 请分享您的导入 - 包括 ngModule 和此组件。除此之外,我想知道您使用的是 Firebase 实时数据库还是 Firebase Cloud Firestore?因为对于实时数据库,您应该导入 AngularFireDatabase,对于 Cloud Firestore,您应该导入 AngularFirestorehttps://github.com/angular/angularfire2
    【解决方案2】:

    尝试使用 snapshotChanges()

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

    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

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2018-05-27
      • 2018-03-21
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      相关资源
      最近更新 更多