Observable не вернет значения после перехода назад - PullRequest
0 голосов
/ 26 марта 2020

У меня есть заметка, на которую я подписываюсь. Работает нормально, но как только навигация включится и снова вернется, данные не будут отображаться. Как так?

export class ProductOverviewComponent implements OnInit, OnDestroy {

  products;
  subscription;

  constructor(private data: CollectionService) { }

  ngOnInit(): void {
    this.subscription = this.data.products.subscribe(value => {
      console.log(value);
      this.products = value;
    });
  }

  ngOnDestroy(): void {
    this.subscription.unsubscribe();
  }

}
export class CollectionService {
  private productCollection: AngularFirestoreCollectionGroup<any>;

  products: Observable<any[]>;

  constructor(private db: AngularFirestore) {
    this.productCollection = db.collectionGroup('products');
    this.fetchProducts();
  }

  fetchProducts() {
    this.products = this.productCollection.snapshotChanges().pipe(
      map(actions => actions.map(a => {
        const data = a.payload.doc.data();
        const id = a.payload.doc.id;
        return { id, ...data };
      }))
    );
  }
}

1 Ответ

1 голос
/ 26 марта 2020

Вам необходимо добавить shareReplay, чтобы данные передавались и воспроизводились среди подписок:

fetchProducts() {
    this.products = this.productCollection.snapshotChanges().pipe(
      map(actions => actions.map(a => {
        const data = a.payload.doc.data();
        const id = a.payload.doc.id;
        return { id, ...data };
      })),
      shareReplay(1),
      // if you want to unsubscribe from source obs when there are no more subscribers
      // shareReplay({ refCount: true, bufferSize: 1 })
    );
  }
...