Ionic + Firebase - база данных в реальном времени не обновляет представление - PullRequest
0 голосов
/ 09 июня 2018

У меня действительно странная проблема с моим приложением.Чтобы база данных отображалась в реальном времени, мне нужно взаимодействовать с приложением.2 месяца назад у меня не было этой проблемы, информация появилась нормально, но теперь я должен нажать на кнопку или что-то, чтобы обновить вид.

Я сделал быстрый GIF здесь:

Если вы сделаете паузу, как только я нажму кнопку <- back, вы поймете, что я имею в виду .. https://i.gyazo.com/44b450aa502dc7f37e5a5feea19824c6.mp4

Я не знаю, что я сделал, чтобы это произошло ..

Вот пример кода из моего приложения:

.ts:

  if(fromClick) { this.subscription.off(); }
  this.postFeed = new Array();
  this.subscription = this.database.database.ref('/posts/'+this.locationId)
  .orderByChild('score')
  .limitToLast(10);
  this.subscription.on('child_added', (snapshot) => {
        this.postFeed.push(snapshot.val())
  });

.html:

  <ng-container *ngFor="let post of postFeed.reverse(); let i = index">
    <post [postData]="post"></post>
  </ng-container>

Итак, этот код выше работал отлично, но теперь мне нужно взаимодействовать с моим приложением, чтобы оно отображалось на экране, даже если консоль postFeed прекрасно работает. Данные отображаются в консоли именно тогда, когда я их запрашиваю, но не отображаются на экране.

Есть идеи?Как я уже говорил, раньше все работало нормально.Любая помощь будет отличной!Спасибо

1 Ответ

0 голосов
/ 12 июня 2018

Для всех, у кого есть эта проблема, NgZone был ответом для меня.

Я импортировал его:

import { NgZone } from '@angular/core';

добавил его в конструктор:

public zone: NgZone,

, а затем обернул его вокруг моего кода пожарной базы:

  this.zone = new NgZone({});
  if(fromClick) { this.subscription.off(); }
  this.postFeed = new Array();
  this.subscription = this.database.database.ref('/posts/'+this.locationId)
  .orderByChild('score')
  .limitToLast(10);
  this.subscription.on('child_added', (snapshot) => {
    this.zone.run(() => {
        this.postFeed.push(snapshot.val())
     }):
  });

, и это прекрасно сработало для меня.Я не смог найти фактическую причину проблемы, но я просто обернул код NgZone вокруг всех своих функций firebase, и он работал как раньше.Если бы у кого-то было больше информации, это было бы здорово.

...