Добавить документ Firestore к наблюдаемой - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть наблюдаемая user, и я хочу добавить в нее документ Firestore. Прямо сейчас я получаю сообщение об ошибке в своей среде IDE: «Тип« DocumentData »нельзя назначить типу« Observable »». Как бы я это сделал? Я также хочу слушать изменения.

//The observable
user: Observable<User>;

//Fetching the user, then trying to assign it to the variable
this.afs.doc(`Users/${uid}`).ref.get().then((doc)=> {
    this.user = doc.data();
  })

1 Ответ

0 голосов
/ 04 сентября 2018

Если вы используете angularfire2, вы можете прослушать изменения Firestore с помощью .valueChanges()

user$: Observable<User> = this.afs.doc(`Users/${uid}`).valueChanges();

userSubscription: Subscription = this.user$
  .subscribe((data) => {
     console.log('user$ observable data: ', data);
  });

Если вы хотите включить метаданные, такие как идентификатор документа, вы можете использовать .snapshotChanges() и получить данные, используя несколько map s.

Если вы используете RxJS 6, это может выглядеть примерно так:

user$: Observable<User> = this.afs.doc(`Users/${uid}`)
  .snapshotChanges()
  .pipe(
     map(changes => {
        changes.map(change => {
           return change.payload.doc.data();
        })
     })
  );

userSubscription: Subscription = this.user$
  .subscribe((data) => {
     console.log('user$ observable data with metadata: ', data);
  });

или та же .snapshotChanges() функциональность, но короче:

user$: Observable<User> = this.afs.doc(`Users/${uid}`).snapshotChanges().pipe(
     map(changes => changes.map(change => change.payload.doc.data() )) );

userSubscription: Subscription = this.user$.subscribe((data) => console.log(data));
...