Отображение Firebase, наблюдаемого в угловом шаблоне

1

Я не могу использовать Angular для итерации по наблюдаемой Firebase, чтобы получать только историю заказов пользователей и выводить ее в шаблон. Я дошел до изменения switchMap для сопоставления, которое избавляется от ошибки, но тогда я не могу получить доступ к данным из шаблона, как я привык... Я новичок в этом. Ниже вы найдете все необходимые файлы и структуру базы данных. Изображение 174551

Этот код...

 this.orders$ = authService.user$.switchMap(u => orderService.getOrdersByUser(u.uid));

... дает мне эту ошибку...

Argument of type '(u: User) => Query' is not assignable to parameter of type '(value: User, index: number) => ObservableInput<{}>'.
  Type 'Query' is not assignable to type 'ObservableInput<{}>'.
    Type 'Query' is not assignable to type 'ArrayLike<{}>'.
      Property 'length' is missing in type 'Query'.

... и у меня полная потеря. Если у вас есть предложения, я буду очень благодарен. Спасибо!

Вот мой КОМПОНЕНТНЫЙ ФАЙЛ:

import { AuthService } from './../auth.service';
import { OrderService } from './../order.service';
import { Component, OnInit } from '@angular/core';
import 'rxjs/add/operator/switchMap';

@Component({
    selector: 'app-my-orders',
    templateUrl: './my-orders.component.html',
    styleUrls: ['./my-orders.component.css']
})
export class MyOrdersComponent {
    orders$;

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

        this.orders$ = authService.user$.switchMap(u => orderService.getOrdersByUser(u.uid));
        console.log(this.orders$);
    }
}

СЕРВИСНЫЙ ФАЙЛ:

import { AngularFireDatabase } from 'angularfire2/database-deprecated';
import { Injectable } from '@angular/core';
import { CartService } from './cart.service';

@Injectable()
export class OrderService {
    constructor(
        private db: AngularFireDatabase,
        private cartService: CartService
    ) { }
    getOrdersByUser(userId: string) {
        return this.db.list('/orders').$ref.orderByChild('userId').equalTo(userId);
    }

}

и МАРКУП:

<h1>Orders</h1>
<table class="table">
    <thead>
        <tr>
            <th>Customer</th>
            <th>Date</th>
            <th></th>
        </tr>
    </thead>
    <tbody>
        <tr *ngFor="let order of orders$ | async">
            <td>{{ order.shipping.name }}</td>
            <td>{{ order.datePlaced | date}}</td>
            <td>
                <a href="#">View</a>
            </td>
        </tr>
    </tbody>
</table>

Изображение 174551

Теги:
angular
firebase
observable
firebase-realtime-database

2 ответа

2
Лучший ответ

Запросы могут быть заказаны только одним способом. Это означает, что вы можете указывать только orderByChild, orderByKey, orderByPriority или orderByValue.

если вы хотите использовать динамический запрос: https://github.com/angular/angularfire2/blob/master/docs/rtdb/querying-lists.md

Удалите запрос equalTo из файла службы.

СЕРВИСНЫЙ ФАЙЛ:

 import { AngularFireDatabase } from 'angularfire2/database-deprecated';
 import { Injectable } from '@angular/core';
 import { CartService } from './cart.service';

  @Injectable()
   export class OrderService {
    constructor(
     private db: AngularFireDatabase,
     private cartService: CartService
 ) { }
   getOrdersByUser(userId: string) {
    return 
 this.db.list('/orders').$ref.orderByChild('userId');
}

}

  • 0
    Черт, это не было сделано, но вы, вероятно, исправили основную проблему. Спасибо за ссылку и вашу помощь. Есть другие идеи?
  • 0
    Какую ошибку вы получаете сейчас так же, как указано выше или отличается?
Показать ещё 5 комментариев
0

Я пробовал пару вещей сейчас...

компонентный файл: заказы; this.orders = authService.user $.map(u => orderService.getOrdersByUser(u.uid)). subscribe(); console.log(this.orders); разметка: {{orders}}

результат браузера: [объект Object]

А также..

асинхронный}

результат браузера: https://shopdb432.firebaseio.com/orders

Ещё вопросы

Сообщество Overcoder
Наверх
Меню