我关于 SO 的第一个问题,请原谅我无意的疏忽!
Firebase 表: Firebase table
订单数据模型: Order data model
ShoppingCart 数据模型: ShoppingCart data model
最后是我的 ShoppingCartItem 数据模型: ShoppingCartItem data model
我想要实现的目标:我试图传递订单键并获取该订单 ID 的整个订单详细信息。
这是我的组件:
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { Subscription } from 'rxjs/internal/Subscription';
import { OrderService } from 'shared/services/order.service';
@Component({
selector: 'myorder',
templateUrl: './myorder.component.html',
styleUrls: ['./myorder.component.css']
})
export class MyorderComponent implements OnInit {
myOrder$: any = {};
orders$;
ordersbyOrderId$;
userId: string;
user: any;
subscription: Subscription;
id;
constructor(private orderService: OrderService, private route: ActivatedRoute) { }
async ngOnInit() {
this.id = this.route.snapshot.paramMap.get('id');
this.myOrder$ = this.orderService.getOrdersByOrderId(this.id);
console.log(this.myOrder$);
}
}
还有,我的服务:
import { Injectable } from '@angular/core';
import { AngularFireDatabase, AngularFireList, AngularFireObject } from '@angular/fire/database';
import { map } from 'rxjs/operators';
import { Order } from 'shared/models/order';
import { ShoppingCartService } from './shopping-cart.service';
@Injectable({
providedIn: 'root'
})
export class OrderService {
y: any;
userId: string;
myOrders: Order[] = [];
constructor(private db: AngularFireDatabase,
private shoppingCartService: ShoppingCartService) { }
getOrderByOrderId(orderId: string) {
return this.db.list("/Orders", (ref) => {
console.log(ref.orderByChild("key").equalTo(orderId));//getting the params key here
return ref.orderByChild("key").equalTo(orderId);
})
}
getOrdersByUser(userId: string) {
console.log(userId);
this.userId = userId;
return this.db.list("/Orders", (ref) => {
return ref.orderByChild("userId").equalTo(userId);
}).snapshotChanges().pipe(
map((orders: any) => orders.map(prod => {
const payload = prod.payload.val();
const key = prod.key;
return <Order>{ key, ...payload };
})),
);
}
我正在从 getOrdersByUser()
获取数据,但无法按订单 ID 获取数据。事实上,我应该使用 getOrdersByUser()
数组(Firebase 列表),然后使用订单 ID 进一步过滤它,因为它持有同一用户的订单。
提前致谢,如果我能提供更多信息,请告诉我。
老实说,我不太擅长查询 Firebase。希望他们会提供扩展方法来传递参数并完成所有映射等。
PS:Angular 和 Firebase 都是最新版本。