Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用AngularFirebase的接口_Angular_Typescript_Firebase_Firebase Realtime Database_Casting - Fatal编程技术网

无法使用AngularFirebase的接口

无法使用AngularFirebase的接口,angular,typescript,firebase,firebase-realtime-database,casting,Angular,Typescript,Firebase,Firebase Realtime Database,Casting,在尝试用angular创建购物车时,我遇到了有关组件和服务的类型问题。我的服务当前返回AngularFireList,尽管我可以更改其类型,但这样做会对其他方法和组件内部产生副作用。我想知道是否有一种有效的方法可以让我当前的接口变成这种类型 我尝试将类型转换为可观察的,这再次解决了一个问题,同时引入了另一个问题 我当前的界面是: 导出接口ProdInterface{ $key:string; 颜色方式:字符串; 名称:字符串; id:编号; 描述:字符串; 图片:弦; 价格:数量; 数量:数量;

在尝试用angular创建购物车时,我遇到了有关组件和服务的类型问题。我的服务当前返回
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