无法使用AngularFirebase的接口
在尝试用angular创建购物车时,我遇到了有关组件和服务的类型问题。我的服务当前返回无法使用AngularFirebase的接口,angular,typescript,firebase,firebase-realtime-database,casting,Angular,Typescript,Firebase,Firebase Realtime Database,Casting,在尝试用angular创建购物车时,我遇到了有关组件和服务的类型问题。我的服务当前返回AngularFireList,尽管我可以更改其类型,但这样做会对其他方法和组件内部产生副作用。我想知道是否有一种有效的方法可以让我当前的接口变成这种类型 我尝试将类型转换为可观察的,这再次解决了一个问题,同时引入了另一个问题 我当前的界面是: 导出接口ProdInterface{ $key:string; 颜色方式:字符串; 名称:字符串; id:编号; 描述:字符串; 图片:弦; 价格:数量; 数量:数量;
AngularFireList
,尽管我可以更改其类型,但这样做会对其他方法和组件内部产生副作用。我想知道是否有一种有效的方法可以让我当前的接口变成这种类型
我尝试将类型转换为可观察的
,这再次解决了一个问题,同时引入了另一个问题
我当前的界面是:
导出接口ProdInterface{
$key:string;
颜色方式:字符串;
名称:字符串;
id:编号;
描述:字符串;
图片:弦;
价格:数量;
数量:数量;
}
我希望实现此方法,以便保留$key
,这将允许我在firebase数据库中查找项目:
异步addToCart(产品:ProdInterface){
让cartId=wait this.getOrCreateCart();
让item$=this.getItem(cartId,product.key);
项目$.snapshotChanges().pipe(获取(1)).subscribe(项目=>{
项$.update({product:product,
数量:(item.payload.exportVal().quantity | | 0)+1});
});
}
从firebase数据库获取我的所有产品将返回一个可观察的
类型,该类型没有我的addToCart
方法所需的$key
属性
getAll(){
返回此.db.list('/products').valueChanges();
}
}
这意味着使用该方法时返回错误的类型:
this.products$=this.productService.getAll();
我的最终目标是,我可以将当前返回的getAll()
类型映射到我的ProdInterface
,这样我就可以在addToCart
方法中使用它
我希望能得到正确方向的指导
谢谢 通过Firebase的示例,您可以尝试以下方法:
this.product$ = db.ref("products").orderByKey()
.once("value")
.pipe(
.map(snapshot => {
snapshot.forEach(childSnapshot) {
var key = childSnapshot.key
var childData = childSnapshot.val()
return {key, ...childData}
}
}));
$key
是否在firebase db中表示文档的id?@ConstantinBeer是的,这可能会有帮助@ConstantinBeer感谢链接,这是朝着正确方向迈出的一步——不过我在项目中使用的是实时数据库而不是firestore。而且似乎列出的属性不同我猜你已经读过AngularFire文档了?我有一个版本,但略有不同。现在单击addToCart按钮时,我正在修复一个bug