为什么获取存储在Firestore中的数据的ID与以前版本中可以直接访问$ key的ID一样严峻?我在下面的代码中以错误的方式解决这个问题吗?在Post模型中,我必须有一个可空的字符串字符串来直接存储它。
getCollection$(): Observable<Post[]> {
return this.afs.collection<Post>()
.snapshotChanges().map(actions => {
return actions.map(a => {
const data = a.payload.doc.data() as Post;
const id = a.payload.doc.id;
return { id, ...data };
});
});
}
另外,有没有办法返回通过add方法添加的新文档的ID?
this.afs.collection<Post>(this.path).add(data);
答案 0 :(得分:0)
图书馆Angularfire2
的作者决定了这种方式:),它第一次看起来很苛刻,但是当你习惯它时不再有问题。
您可以使用?
定义一个可选参数,该参数可以在typescript
link中使用。当您只关心id
时,这将很容易,此处您只有一个可选参数。
但是当您需要.snapshotChanges()
的更多元数据时,type:'added|removed|modified'
,fromCache
,newIndex
或oldIndex
扩展您当前的模型,如此官方所述doc会很方便。
export interface PostId extends Post { id: string; }
getCollection$(): Observable<PostId[]> {
return this.afs.collection<Post>()
.snapshotChanges().map(actions => {
return actions.map(a => {
const data = a.payload.doc.data() as Post;
const id = a.payload.doc.id;
return { id, ...data };
});
});
}
但请注意,无论您在何处获得此功能,都需要使用id扩展模型。
关于你的上一个问题
//generate an id from firestore
let tempId = this.afs.createId();
this.afs.collection<Post>(this.path).doc(tempId).set(data);