Получить в Firebase сложный объект, содержащий другой объект - PullRequest
0 голосов
/ 21 мая 2018

У меня есть проект Angular2, связанный напрямую с Firebase.Структура моей базы данных представлена ​​на рисунке ниже.Итак, у нас есть пара объектов.

Main это заказы, затем порядок ключей, некоторая дополнительная информация и еще один объект "items", который содержит несколько объектов, таких как 0, 1 и т. Д. У каждого из них есть объект.называется "продукт", который имеет некоторые другие параметры ...

orders
    -> datePlaced,
            items
                -> 0
                    -> quantity, totalPrice, product
                                                  ->
                                                     imageUrl,
                                                        price,
                                                        title

Я хочу сказать, что когда я создаю вкладку "Мои заказы", я хотел бы получить информацию о каждом элементе в определенном порядке, напримерЯ вижу список ордеров и маленькую кнопку «Просмотр ордера», нажимаю и вижу детали об этом ордере с помощью специального ключа.

Я подготовил вид с ордерами, кнопками, но не могу взять какие-либо объекты из ордеров объектов,У меня есть пустая страница.

order-details.component.ts

    export class OrderDetailsComponent implements OnInit, OnDestroy {

order$;
userId: string;
userSubscription: Subscription;

constructor(private orderService: OrderService, private authService: AuthService) {}

async ngOnInit() {
    this.userSubscription = this.authService.user$.subscribe(user => this.userId = user.uid);
    this.order$ = this.authService.user$.switchMap(u => this.orderService.getOrdersByUser(u.uid));
}

ngOnDestroy() {
    this.userSubscription.unsubscribe();
}

}

order-details.component.html

<div class="card" *ngIf="order$ | async as order">
<div class="card-body">
    <h5 class="card-title">Your Order</h5>
    <p class="card-text">You ordered {{ order.datePlaced | date }} items</p>
    <ul class="list-group list-group-flush">
    <li *ngFor="let order of order.shipping" class="list-group-item">
        {{ order.city }} x {{ order.city }}
        <div class="float-right">
        {{ order.totalPrice | currency:'USD':'symbol' }}
        </div>
    </li>
    <li class="list-group-item font-weight-bold">
        Total
        <div class="float-right">
        {{ order.totalPrice | currency:'USD':'symbol' }}
        </div>
    </li>
    </ul>
</div>
</div>

order.service.ts

export class OrderService {

constructor(private db: AngularFireDatabase, private shoppingCartService: ShoppingCartService) { }

async placeOrder(order) {
    let result = await this.db.list('/orders').push(order);
    this.shoppingCartService.clearCart();
    return result;
}

getOrders() { 
    return this.db.list('/orders');
}

getOrdersByUser(userId: string) {
    return this.db.list('/orders', {
    query: {
        orderByChild: 'userId',
        equalTo: userId        
    }
    });
}
}

Как получить каждый параметр из сложного объекта "orders"?

1 Ответ

0 голосов
/ 28 мая 2018

Я решил эту проблему, указав параметры param в файле order-details.component.ts, а затем создал функцию getOrder (id) в службе заказов.Когда у вас есть идентификатор вашего заказа, довольно просто взять объект из базы данных.

...