在angularfire2 文档中,它解释说,为了保持文档 ID 以供使用.valueChanges()
,您应该创建一个 with afs.createId()
。
export class AppComponent {
private itemsCollection: AngularFirestoreCollection<Item>;
items: Observable<Item[]>;
constructor(private readonly afs: AngularFirestore) {
this.itemsCollection = afs.collection<Item>('items');
// .valueChanges() is simple. It just returns the
// JSON data without metadata. If you need the
// doc.id() in the value you must persist it your self
// or use .snapshotChanges() instead. See the addItem()
// method below for how to persist the id with
// valueChanges()
this.items = this.itemsCollection.valueChanges();
}
addItem(name: string) {
// Persist a document id
const id = this.afs.createId();
const item: Item = { id, name };
this.itemsCollection.add(item);
}
}
但是,当添加到集合中时,项目的 id 和存储它的键不同。这个对吗?有没有办法在添加到集合时设置密钥以使它们匹配?我觉得拥有两个 id 将来可能会令人头疼。
我知道这.snapshotChanges()
提供了元数据,但是我正在流式传输项目中的项目,并且映射快照更改会导致每个条目以角度重新呈现。我认为这是文档在他们说以下内容时警告的内容:
快照更改()
...
你什么时候不使用它?- 当您需要比数组更复杂的数据结构时,或者如果您需要在发生更改时对其进行处理。