angular - 无法从集合 firebase angular 中删除文档
问题描述
我更新了用于结构化的 Firestore 图像:
我使用这种方法删除了集合中的文档,但我没有收到错误,产品的 ID 仍然是正确的。
firebase.service.ts
deleteProdusBayonete(id: string): Promise<void> {
return (
console.log(id),
this.firestore
.collection("bayonete")
.doc<CutiteInterface>(`bayonete/bayonete/${id}`)
.delete()
.catch((error) => {
console.log(error);
})
);
}
删除-product.page.ts
async deleteProdus(fID) {
console.log(fID);
const alert = await this.alertController.create({
message: "Are you sure you want to delete this product?",
buttons: [
{
text: "Cancel",
role: "cancel",
handler: (aha) => {
console.log("Confirm Cancel: blah", aha);
},
},
{
text: "Okay",
handler: () => {
this.FirebaseService.deleteProdusBayonete(fID).then(() => {
console.log(fID + " => Deleted");
});
},
},
],
});
await alert.present();
}
删除-product.page.html
<ion-col class="arranged" size-lg="6" size-md="6" size-sm="6" size-xs="12"
*ngFor="let bayoneta of this.ProduseService.allBayonet | async"
[routerLink]="['/produse','angro', 'bayonete', bayoneta.id]">
...
<ion-button type="submit" (click)="this.deleteProdus(bayoneta.id)">Sterge
Produs</ion-button>
** 更新:我修改了我的方法,所以我声明了另一个名为的参数,uniqueId,它是随机的生成器。但是..如果我无法达到通过 this.firestore.createId();
功能添加产品时自动生成的documentId,我将无法达到此参数。
不过,我可以获取我的自定义参数,但无法使用我的方法来删除具有以下相同唯一 ID 的文档。**
async deleted(uniqueID: string): Promise<any> {
return await firebase
.firestore()
.collection("bayonete")
.where("uniqueID", "==", `${uniqueID}`)
.get()
.then((res: any) => {
console.log(uniqueID);
firebase.firestore().collection("bayonete").doc(uniqueID).delete();
console.log(uniqueID);
})
.catch((err: any) => {
console.log(err);
});
}
我使用的创建产品方法是这样的:
createProdus(
id: any,
title: string,
description: string,
stoc: boolean,
price: number,
reducere: number,
tag: string,
image: string,
userId: string,
uniqueID: string
): Promise<void> {
this.actualID = this.firestore.createId();
this.firestore.collection("bayonete");
return this.firestore.doc(`${id}/${this.actualID}`).set({
id,
title,
description,
stoc,
price,
reducere,
tag,
image,
userId,
uniqueID,
});
}
解决方案
问题在于,在您的 Firestore 上,documentId
该字段不是您称为id
. 为了做到这一点,您必须首先documentId
通过查询 firestore 来发现 ,而在 AngularFire 中,您必须使用它snapshotchanges()
来做到这一点。因此,您的删除功能代码可能如下所示:
deleteProdusBayonete(id: string): Promise<void> {
return (
console.log(id),
this.firestore
.collection('/bayonete', ref => ref.where('id', '==', ${id}))
.snapshotChanges().pipe(
map(actions => actions.map(a => {
const id = a.payload.doc.id;
return { id };
})))
.subscribe(documentId=> {
this.firestore
.collection("bayonete")
.doc<CutiteInterface>(documentId)
.delete()
.catch((error) => {
console.log(error);
})
});
);
}
让我知道这个是否奏效。
注意:这是假设 的值id
是唯一的。
推荐阅读
- css - CSS:样式和颜色外部链接
- laravel - Docker-组合丢失的文件
- python - 带有多个打开它的按钮的破折号模式
- java - 为什么这条线被java忽略了?
- autoit - 为什么函数“if ProcessExist”在其他计算机中不起作用
- python - 如何将 CP1252 字符串转换为 numpy 中的字符列表
- python-3.6 - 如何将预定义的变量值传递到 Python 中预定义的硬编码字符串的一部分?
- loops - Jmeter - 如何循环请求?
- node.js - 无法从 config.xml 恢复插件“NetworkStatus”。您可能需要再次尝试添加它。错误:错误:npm:命令失败,退出代码为 1
- ansible - 获取归档模块运行的所有一级文件夹