我的Firebase Firestore数据库是这样的:
Collection:orders
DocumentID: (autogenerated)
Document: orderName: string
这样声明的变量:
orderCollection: AngularFirestoreCollection<Order>
orders: Observable<Order[]>
我正在得到所有这样的“订单”:
orderCollection = this.afs.collection('orders');
orders = this.orderCollection.valueChanges();
然后我要打印这样的订单:
<tr *ngFor="let o of orders | async">
<td>{{o.orderName}}</td>
<td><a (click)="editOrder(o.$key)">Edit</a></td>
</tr>
直到编辑部分,一切都正常。
对于编辑:如何发回订单的文档ID?我想发回订单文件ID,以便随后对其进行编辑。使用实时数据库,您可以使用$ key进行某些操作,但不能使用firestore。有建议吗?
答案 0 :(得分:0)
在AngularFirestore中,它只是document.id
。但是,要执行此操作,必须使用snapshotChanges
而不是valueChanges
。所以:
orders = this.orderCollection.snapshotChanges();
然后:
<tr *ngFor="let o of orders | async">
<td>{{o.data().orderName}}</td>
<td><a (click)="editOrder(o.id)">Edit</a></td>
</tr>
受Firestore Getting documents id from collection和Get Collections with Document Ids Included的启发。
答案 1 :(得分:0)
导入
import { map } from 'rxjs/operators';
并在您的界面中确保包含ID
export interface Order{
id?:string
foo1?: string
foo2?: string
foo3?: string
}
您的函数看起来像这样
this.orderCollection = this.afs.collection<Order>('orders');
this.orders = this.orderCollection.snapshotChanges().pipe(
map(kazi => {
return kazi.map(a => {
const data = a.payload.doc.data();
const id = a.payload.doc.id;
return { id, ...data };
});
})
);
获取结果
this.orders.forEach(order =>{
console.log(order)
})
我希望会对您有所帮助