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时同步。如果他已经有了它,它会发生得相当快,如果没有,它会在他恢复连接时发生。关于实时听众,没有区别。也许可以检查一下你是如何处理状态变化的。多谢塔里克!