angular - “AngularFireObject<{}>”类型上不存在属性“管道”
问题描述
我是 Angular 的初学者。我正在使用 Angular 版本 6 观看 Mosh Hamedani 的教程,但问题是教程版本是 4。我正在处理 AddToCart 按钮上的电子商务项目,产品应该通过单击按钮来增加数量并更新在 Firebase 中使用 productId 并且如果我尝试添加新产品,那么该新产品的 id 应该添加到 AngularFire 数据库中。
现在一切正常,我在 shopping-cart.service.ts 文件中遇到错误。错误在最后一行async addToCart(product: Product)中,错误显示 AngularFireObject 类型上不存在属性管道。
这是代码。
购物车.service.ts
import { Injectable } from '@angular/core';
import { AngularFireDatabase } from '@angular/fire/database';
import { Product } from '../models/products';
import { take } from 'rxjs/operators';
@Injectable({
providedIn: 'root'
})
export class ShoppingCartService {
constructor(private db: AngularFireDatabase) { }
private create(){
return this.db.list('/shopping-carts').push({
dateCreated: new Date().getTime()
})
}
private getCart(cartId: String){
return this.db.object('/shopping-carts/' + cartId);
}
private getItem(cartId: string, productId: string){
return this.db.object('/shopping-carts/' + cartId + '/items/' + productId);
}
private async getOrCreateCartId(){
let cartId = localStorage.getItem('cartId');
if(cartId) return cartId;
let result = await this.create();
localStorage.setItem('cartId', result.key);
return result.key;
}
async addToCart(product: Product){
let cartId = await this.getOrCreateCartId();
let item$ = this.getItem(cartId, product.key);
item$.pipe(take(1)).subscribe(item => {
item$.update({ product: product, quantity:(item.quantity || 0) + 1 });
});
}
}
解决方案
这里的问题是您的this.getItem()
方法没有返回 a Observable
,而是返回AngularFireObject
没有pipe
属性的 ,因此您应该调用valuChanges
将返回 a 的方法Observable
private getItem(cartId: string, productId: string){
return this.db.object('/shopping-carts/' + cartId + '/items/' + productId).valueChanges();
}
async addToCart(product: Product){
let cartId = await this.getOrCreateCartId();
let item$ = this.getItem(cartId, product.key);
item$.pipe(take(1)).subscribe(item => {
item$.update({ product: product, quantity:(item.quantity || 0) + 1 });
});
}
推荐阅读
- html - CSS从底部动画div从它的高度
- python - 我的 python websocket 连接似乎没有收到任何消息
- .net - 使用 BindingList 绑定到对象的 DevExpress GridControl 不更新控件
- excel - VBA用于单元格值输入后单元格范围内的自动公式计算
- javascript - JS 中的图像未使用 context.drawImage() 加载到画布 - 基于 Tile 的游戏
- php - PHPUnit AbstractPHPProcess 反序列化
- php - 为什么数据库不更新 codeigniter
- php - 通过 preg_replace_callback 用 Ascii 替换所有十六进制
- python-3.x - 给定员工信息字典列表,如何在适用时使用 DICT 或 LIST 组合按 ID 号查找
- ios - Gmail 插件开始出现在 iOS 上?