带有Firestore“ get()”的Angular Universal不起作用,但“ valueChanges()”起作用

时间:2019-12-26 15:12:45

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

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

我一直在遵循以下指南:

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()));
    }
}

1 个答案:

答案 0 :(得分:0)

valuechanges()是包angularFire内的方法,它返回Observable,而get()方法位于firestore包内,并返回Promise。因此,不能将pipeget()一起使用

Angularfire:

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