【发布时间】:2022-02-11 21:12:16
【问题描述】:
所以首先在b-navbar.component.ts中调用getCart函数:
export class BNavbarComponent implements OnInit{
appUser: any;
cart$ : Observable<ShoppingCart | null>;
constructor(private auth : AuthService, private shoppingCartService : ShoppingCartService) {}
async ngOnInit() {
this.auth.appUser$.then(dataObservable => {
dataObservable?.subscribe(data => {
this.appUser = data
});
});
this.getCart()
}
async getCart() {
this.cart$ = await this.shoppingCartService.getCart()
this.cart$.subscribe(data => {
console.log("Nav Observable data: ", data);
})
}
查看shopping-cart.service.ts 并获得可观察的承诺:
export class ShoppingCartService {
constructor(private db : AngularFireDatabase) { }
private create(){
return this.db.list("/shopping-carts").push({
// dateCreated : new Date().getTime()
date: "date"
});
}
async getCart(): Promise<Observable<ShoppingCart>>{
let cartId = await this.getOrCreateCartId();
let cart = this.db.object("/shopping-carts/" + cartId);
return new Promise((resolve) => {
cart.valueChanges().subscribe(x => {
let newX = x as ShoppingCart
let items = newX.items
resolve(of(new ShoppingCart(items)))
})
})
}
private async getOrCreateCartId() : Promise<string> {
let cartId = localStorage.getItem("cartId");
if (cartId) return cartId;
let result = await this.create();
localStorage.setItem("cartId", result.key as string);
return result.key as string;
}
}
现在在我的 html 中插入值时会出现问题,因为 getCart 承诺中返回的可观察对象解析了“静态”可观察对象,这意味着它在解析时终止可观察对象,因此数据永远不会更新。请帮忙:))
<a class="navbar-item" routerLink="/shopping-cart">
Shopping Cart
<span *ngIf = "cart$ | async as cart" class="tag is-warning is-rounded" >
{{ cart.totalItemsCount }}
</span>
</a>
【问题讨论】:
-
this.db.list("/shopping-carts").push({date: "date"})中的shopping-cart-service是否返回数组、Promise<Array或Observable<Array>? -
返回:
lang-ts AngularFireList<unknown>.push(data: unknown): firebase.database.ThenableReference
标签: javascript angular typescript firebase-realtime-database angularfire