Данные не извлекаются из Firebase в Angular 7 - PullRequest
2 голосов
/ 29 марта 2019

Я хочу получить набор данных из базы данных Firebase и заполнить мой выпадающий список. Но ничего не появляется. Я провел много исследований, но все еще не могу это исправить. Я использую Угловой 7 .

ERROR Error: "Cannot find a differ supporting object 'function (events) {
            var snapshotChanges$ = Object(_snapshot_changes__WEBPACK_IMPORTED_MODULE_0__["snapshotChanges"])(query, events);
            return afDatabase.scheduler.keepUnstableUntilFirst(afDatabase.scheduler.runOutsideAngular(snapshotChanges$)).pipe(Object(rxjs_operators__WEBPACK_IMPORTED_MODULE_5__["map"])(function (actions) { return actions.map(function (a) { return a.payload.val(); }); }));
        }' of type 'valueChanges'. NgFor only supports binding to Iterables such as Arrays."

category.service.ts

import { Injectable } from '@angular/core';
import { AngularFireDatabase } from 'angularfire2/database';

@Injectable()
export class CategoryService {

  constructor(private db: AngularFireDatabase) { }

  getCategories(){

    return this.db.list('/categories').valueChanges;//get categories list in database and return it
  }
}

продакт-form.component.ts

import { Component, OnInit } from '@angular/core';
import { CategoryService } from 'src/app/category.service';
import { ProductService } from 'src/app/product.service';
import { Router } from '@angular/router';

@Component({
  selector: 'app-product-form',
  templateUrl: './product-form.component.html',
  styleUrls: ['./product-form.component.css']
})
export class ProductFormComponent implements OnInit {

  categories$;

  constructor(private router: Router, private categoryService: CategoryService, private productService: ProductService) { 
    this.categories$ = categoryService.getCategories();
  }

Сегмент кода, связанный с проблемой в product-from.component.html

 <div class="form-group">
      <label for = "category">category</label>

      <select #category="ngModel" ngModel name="category" id ="category"class="form-control" required>
          <option value=""></option>
          <option *ngFor="let cate of categories$" [value]=" cate.$key ">{{ cate.name }}</option>
       </select>

       <div class="alert alert-danger" *ngIf="category.touched && category.invalid">Category is required.
       </div>
</div>

Так выглядит моя база данных

This is how my categories entry looks like

1 Ответ

1 голос
/ 11 апреля 2019

Вот так выглядит моя база данных

Скорее всего, проблема в дизайне вашей базы данных.Попробуйте изменить его с объектно-ориентированного проектирования на создание массива следующим образом.

Экспорт файла JSON из firebase и изменение категорий в массив .Таким образом, это будет выглядеть следующим образом.

"Categories": [
    { "name":"Bread"},
    { "name":"Dairy" },
    { "name":"Fruits" },
    .....
    .....
    .....
  ]

Импорт модифицированного JSON в firebase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...