如何在导航到 Angular 9 中的另一个页面后删除方法"Add"



我有一个包含产品列表的页面,将它们添加到订单中,然后转到订单列表并尝试删除整个订单,再次添加所有文档,刷新页面后不会发生。这是因为列表页中的方法仍在内存中。我尝试OnDestroy,但没有任何变化。如何在导航到另一个页面后删除方法"添加"。产品列表中的方法"添加"。

addToCard(p) {
this.auth.user$.subscribe(ud => {
if (ud !== null) {
const dfecha = new Date(Date.now());
const dotime = dfecha.toLocaleTimeString();
const orderef = this.dataRef(ud.uid);
const dprice = p.price;
const dquant = p.quant || 1;
const pricetotal = dprice * dquant;
this.osrv.getOrderOpenOut(ud.uid, this.biident).subscribe(KX => {
if (KX.length === 0) {            
orderef.add({
data...
}).then((ref) => {
this.orderid = ref.id;
orderef.doc(ref.id).collection('products').doc(p.id).set({
prodcode: p.code,
prodid: p.id,
prodnam: p.name,
prodquant: this.OrderQuant || 1,
prodmax: p.maxpedido,
prodprice: p.price,
totalprice: pricetotal,
});
});
} else {
this.osrv.getOrderOpenOut(ud.uid, this.biident).subscribe(xId => {
const nOrdId = xId[0];
orderef.doc(nOrdId).collection('products').doc(p.id).set({
prodcode: p.code,
prodid: p.id,
prodnam: p.name,
prodquant: this.OrderQuant || 1,
prodmax: p.maxpedido,
prodprice: p.price,
totalprice: pricetotal,
});
});
}
});
this.snack.open('El producto se ha añadido al pedido', 'OK', {duration: 2000});
} else {
const dialogRef = this.dialog.open(LoginDialogComponent, {
width: '320px',
});
}
});
}

和顺序列表中的方法解传:

deleteOrder(e) {
const order = this.db.collection('users').doc(this.userid).collection('ordersout').doc(e.id);
const quantprodu = order.collection('products');
quantprodu.get().forEach(ilp => {
if (ilp.size === 0) {
order.delete();
} else {
quantprodu.get().forEach(indprod => {
indprod.forEach(prd => {
quantprodu.doc(prd.id).delete();
});
}).then(() => {
order.delete();
}).then(() => {
this.snap.open('El pedido se ha eliminado de la lista', 'OK', {duration: 2000});
this.backToHome();
});
}
});
}

我使用 ng 模板显示一些组合,一些使用路由。 删除最后一个订单我收到此错误。

ERROR FirebaseError: Function CollectionReference.doc() requires its first argument to be of type non-empty string, but it was: undefined
at new n (http://localhost:4200/vendor.js:165025:23)
at dr (http://localhost:4200/vendor.js:173857:15)
at hr (http://localhost:4200/vendor.js:173802:5)
at n.doc (http://localhost:4200/vendor.js:179537:50)
at AngularFirestoreCollection.doc (http://localhost:4200/vendor.js:86736:54)
at SafeSubscriber._next (http://localhost:4200/main.js:1922:37)
at SafeSubscriber.__tryOrUnsub (http://localhost:4200/vendor.js:273576:16)
at SafeSubscriber.next (http://localhost:4200/vendor.js:273515:22)
at Subscriber._next (http://localhost:4200/vendor.js:273465:26)
at Subscriber.next (http://localhost:4200/vendor.js:273442:18)

但是订单中的产品会再次添加

可能是您的 Firestore 实例的缓存数据设置未正确设置,这可能会导致您面临的问题,您可以在本文档中查看有关如何正确设置它的更多详细信息。

话虽如此,作为一种解决方法,您可以在前端替换纯 htmlhref中的router-link角度组件。

相关内容

最新更新