我更新了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);
})
);
}
delete-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();
}
delete-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,
});
}
答案 0 :(得分:1)
问题在于,在您的Firestore上,documentId
不是您称为id
的字段。为此,您必须首先通过查询Firestore发现documentId
,在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
的值是唯一的。