FirebaseListObservable не заполняется - PullRequest
0 голосов
/ 25 августа 2018

Я делаю угловой тестовый проект с данными пожарной базы. Проблема, с которой я сталкиваюсь, состоит в том, чтобы показать данные в моей базе данных Firebase. Я могу отправить данные в базу данных, но не могу увидеть данные на своей странице. Я использую angularfire2 в своем угловом проекте. Кажется, я что-то упускаю, но не могу понять, что. Ниже мой код.

это мой компонент.тс

import { Component } from '@angular/core';
import {AngularFireDatabase, AngularFireList} from 'angularfire2/database';
import { FirebaseListObservable, FirebaseObjectObservable } from 'angularfire2/database';
import {Observable} from "rxjs/Observable";

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {

items: FirebaseListObservable<any[]>;

msg: string = '';
constructor(public af: AngularFireDatabase) {
  this.items = af.list('/messages');
}

send(message: string) {
  this.items.push({ message: message });
  this.msg = '';
}
}

и это мой HTML

  <input type="submit" class="submit" value="Send now" (click)="send(message.value)">
  <div class="details-container" *ngFor="let item of items | async">
    <div class="row">
      <div class="medium-9 columns">
        <p> {{ item.message }} </p>
       </div>
      <div class="medium-3 columns">
        <button>delete</button>
        <button>edit</button>
      </div>
    </div>
  </div>

</div>

А это данные из моей базы данных Firebase enter image description here

1 Ответ

0 голосов
/ 25 августа 2018

Я собираюсь здесь использовать конечность, но я думаю, что Angular не понимает асинхронный канал, потому что то, что у вас есть как "items", не является Observable, поэтому вызовите .valueChanges() после метода list.

Пожалуйста, обратитесь к https://github.com/angular/angularfire2/blob/master/docs/rtdb/lists.md для хорошего объяснения того, как valueChanges() работает в вашей ситуации.

Я вижу некоторые ключевые различия в документах выше и что у вас там, вДокументы "items" объявлены как Observable, потому что метод list возвращает AngularFireList, который даже не является массивом.

Теперь, если вам нужно обработать элементы как массив, преобразуйте свой список в наблюдаемые какИтак: this.items = db.list('items').valueChanges(); и подпишитесь на него и заполните любой массив, который вы хотите, хотя мне это кажется излишним, когда вы можете использовать асинхронный канал.

...