Angular Firestore:删除元素后刷新列表

Angular Firestore:删除元素后刷新列表,angular,ionic-framework,google-cloud-firestore,ionic5,angular11,Angular,Ionic Framework,Google Cloud Firestore,Ionic5,Angular11,删除项目后,我无法刷新元素列表。 还有,我不明白的是:为什么在添加元素后它会工作。有什么区别? 我寻找了多种解决方案,但没有找到一个好的 我的服务 addWord(word: Word) { db.collection('words').add({ name: this.toolsService.upperFirstletter(word.name), description: word.description }) .then(() =>

删除项目后,我无法刷新元素列表。 还有,我不明白的是:为什么在添加元素后它会工作。有什么区别? 我寻找了多种解决方案,但没有找到一个好的

我的服务

addWord(word: Word) {
    db.collection('words').add({
      name: this.toolsService.upperFirstletter(word.name),
      description: word.description
    })
      .then(() => {
        this.toastService.toastSuccess(`Le mot ${word.name} a bien créé !`);
      })
      ...
    this.emitWords();
  }

deleteWord(word: Word) {
    db.collection('words').doc(word.id).delete()
      .then(() => {
        this.toastService.toastSuccess(`Le mot ${word.name} a bien été supprimé !`);
      })
      ...
    this.emitWords();
  }

emitWords() {
    const listWords: Word[] = [];
    const wordCollection = db.collection('words').orderBy('name', 'asc').get();
    wordCollection
      .then((querySnapShot) => {
        querySnapShot.forEach((doc) => {
          listWords.push(
            new Word(
              doc.id,
              doc.data().name,
              doc.data().description
            )
          );
          this.listWords$.next(listWords.slice());
        });
      })
    ...
  }


它适用于
add()
,但不适用于
delete()
。谢谢你的帮助

如果您已为
firestore启用脱机功能,则不要使用
,然后
等待
。只要运行代码,就好像它是同步的:

addWord(word:word){
db.collection('words')。添加({
名称:this.toolsService.upperFirstletter(word.name),
描述:word.description
})
this.toastService.toastsucture(`Le mot${word.name}a bien cré!`);
...
}
删除字(字:字){
db.collection('words').doc(word.id).delete()
this.toastService.toastsucture(`Le mot${word.name}a bienétésupplime!`);
...
}
Ant用于实时侦听器使用onSnaphost
如下:

db.collection(“words”).orderBy(“名称”、“asc”)
.onSnapshot((querySnapshot)=>{
var-words=[];
querySnapshot.forEach((doc)=>{
words.push(doc.data().name);
});
console.log(“CA中的当前城市:”,words.join(“,”);
});

这样,您就不必每次更改内容时都调用
emitWords

但我在delete()中就是这么做的。为了添加一个单词,它起作用了。即使emit()在
之外,也可以使用
。你说得对,如果emit()在里面当然更好,但即使这样,刷新也不会每次都起作用。我必须更新我的答案。你能用这种新方法试试吗?好的,我想它可以用了,非常感谢!因此,我将用onSnapshot替换emit()(.then&.catch)。但是如果我想异步地做这件事,我该如何做呢?当我添加一个元素时,为什么异步方法可以工作(列表被刷新)?在firestore集合中添加和删除元素之间有区别吗?firestore默认脱机工作,因此不需要使用异步调用。数据以同步方式添加,并在用户使用internet时同步。如果他已经有了它,它会发生得相当快,如果没有,它会在他恢复连接时发生。关于实时听众,没有区别。也许可以检查一下你是如何处理状态变化的。多谢塔里克!