【问题标题】:Angular Universal with Firestore "get()" doesn't work but "valueChanges()" does带有 Firestore“get()”的 Angular Universal 不起作用,但“valueChanges()”可以
【发布时间】:2019-12-26 15:12:45
【问题描述】:

我一直在尝试将我的 Angular 应用程序制作成一个 Angular Universal 应用程序,该应用程序从 Firebase Firestore 获取数据。

我一直遵循以下指南:

https://fireship.io/lessons/angular-universal-firebase/

初始编译和一切工作正常,即使在 valueChanges() 方法的帮助下从 Firestore 获取数据时也可以解决问题。

但是,如果我将valueChanges() 更改为get() 并在DocumentSnapshot 上调整所需的东西,似乎通用不会等待数据被获取并被渲染。

模板文件

<div class="desc" *ngIf="(task | async) as ts">
  {{ts.description}}
</div>

工作代码

export class Task {

    colRef: AngularFirestoreCollection;

    constructor(private db: AngularFirestore) {
        this.colRef = this.db.collection(this.COL_NAME);
    }

    ngOnInit() {
        this.task = this.colRef.doc(id).valueChanges();
    }
}

代码无效

export class Task {

    colRef: AngularFirestoreCollection;

    constructor(private db: AngularFirestore) {
        this.colRef = this.db.collection(this.COL_NAME);
    }

    ngOnInit() {
        this.task = this.colRef.doc(id).get().pipe(map(docSnapshot => docSnapshot.data()));
    }
}

【问题讨论】:

  • 您找到解决方案了吗?
  • @RafaelCerávolo 我还没有找到解决方案。我通过构建一个 HTTP 函数然后在 Angular 端使用 HttpClient 来解决它。这解决了这个问题,但不是我希望它发生的方式,因为它也涉及编写函数代码。
  • 我最终做的是通过 snapshotChanges() 更改 get() 并测试 isPlataformBrowser() 以在客户端获得第一个结果后取消订阅(因为使用 first() 的管道也是不等待渲染或有时无限期挂起),并且在服务器端永远不会取消订阅。我不知道在服务器端打开一个snapshotChanges的副作用,但我希望angular Universal在完成渲染过程后释放所有资源!

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


【解决方案1】:

valuechanges() 是包angularFire 中的一个方法,它返回一个Observable,而get() 方法在firestore 包中,它返回一个Promise。因此,您不能将pipeget() 一起使用

角火:

https://github.com/angular/angularfire/blob/master/docs/firestore/documents.md#valuechanges

get():

https://firebase.google.com/docs/firestore/query-data/get-data#get_a_document

【讨论】:

  • get() 实际上是 angularFire 中AngularFirestoreDocument 类的一个方法,它返回一个 Observable。 github.com/angular/angularfire/blob/master/src/firestore/…
  • 我明白了,也许最好在存储库中打开一个问题,然后向他们询问 AngularFirestoreDocument 中的 get()。因为我不确定为什么没有记录
猜你喜欢
  • 2017-11-20
  • 2020-01-28
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 2021-01-23
  • 2023-03-29
相关资源
最近更新 更多