【问题标题】:How do I get 1 single document in firestore?如何在 Firestore 中获取 1 个单一文档?
【发布时间】:2018-11-17 06:05:25
【问题描述】:

我在这个愚蠢的事情上浪费了大约 2 小时。当我记录事物时,我看到的只是一个DocumentSnapshot 对象,并且没有任何东西显示在我的模板视图中。我究竟做错了什么?我应该将整个文档传递给我的组件,而不是尝试根据 ID 获取单个文档吗?

//component.ts

constructor(db: AngularFirestore) { 
    this.contactCollection = db.collection('contacts');

    this.contact = this.contactCollection.doc('YYlKh7Gg7khN8L636iYE')
}

//viewTemplate.ts

{{this.contact | async}}

【问题讨论】:

  • 不应该只是{{(contact | async)?.some_prop}}
  • 所有文档获取始终获取文档的所有字段。您需要调出这些字段之一进行显示。 github.com/angular/angularfire2/blob/master/docs/firestore/…
  • @Rafael 那是我的问题。到目前为止,我一直在将数据推送到输入字段中,并且没有在视图中与属性异步运行。我一直在尝试 null 。 {{联系人姓名 |异步}}
  • 很高兴我能帮上忙 :)

标签: javascript angular firebase google-cloud-firestore angularfire2


【解决方案1】:

您缺少.valueChanges() 函数。在下面添加它,现在您将在viewTemplate.ts 中获取整个文档,并且您可以调用其中的任何字段。

//component.ts

constructor(db: AngularFirestore) { 
    this.contactCollection = db.collection('contacts');

    this.contact = this.contactCollection.doc('YYlKh7Gg7khN8L636iYE').valueChanges();
}

//viewTemplate.ts

{{this.contact | async}}

.valueChanges();

【讨论】:

  • 当我尝试访问属性时,视图只显示null,但是当我从 this.contact 记录值时,我看到了整个对象。有什么关系?
【解决方案2】:

这是对我评论的正式答复:

contact 是一个Promise,必须将其解包以获取基础值。在模板中,我们需要一种方式来传达这一点:

  1. AsyncPipe
  2. Safe Navigation Operator ?(确保我们不会尝试访问未包装的值而导致运行时错误)

将所有内容放在模板中:

{{(contact | async)?.some_prop}}

这会适当地等待访问 some_prop(来自 Promise 返回值)解开 contact

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2021-09-30
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多