Есть ли лучший способ получить ссылку на документ Firebase? - PullRequest
0 голосов
/ 28 марта 2020

Я создаю нумерацию страниц для своего приложения Firebase. Я использую Angular и библиотеку AngularFire. Я пытаюсь получить DocumentReference для нумерации страниц, но мой код кажется немного странным. Может быть, вы знаете лучшее решение для получения ссылки на документ?

В моем компоненте:

  posts: any;
  lastPost: any;

   constructor(private afs: AngularFirestore) {
    afs.collection('posts', ref => ref.orderBy('createdAt', 'desc').limit(10)).snapshotChanges().pipe(take(1)).subscribe(actionArray => {
      this.posts = actionArray.map(item => {
        return { 
          ...item.payload.doc.data()
        }
      })

      this.lastPost = actionArray[actionArray.length-1].payload.doc; // get the docReference
    });
  }

Позже в компоненте у меня есть еще одна функция, которой я передаю ссылку на этот документ для загрузки других сообщений с Это сделать c ссылка в качестве отправной точки:

loadOtherPost() {
    this.firestore.collection('posts', ref => ref.orderBy('createdAt', 'desc').startAfter(this.lastPost).limit(10)).snapshotChanges().pipe(take(1)).subscribe(actionArray => {
      this.posts = actionArray.map(item => {
        return {
          ...item.payload.doc.data()
        }
      })
    })
  }

И в представлении:

Показать новые сообщения ☀

Мои вопросы:

  1. есть лучший способ сделать это? Я вижу много повторений кода.
  2. Мне нужно позаботиться о событии отмены подписки, чтобы избежать снижения производительности?
  3. Можно ли использовать что-то вроде .push() для свойства post, подобного этому?
  loadOtherPost() {
    this.firestore.collection('posts', ref => ref.orderBy('createdAt', 'desc').startAfter(this.lastPost).limit(10)).snapshotChanges().pipe(take(1)).subscribe(actionArray => {
      this.posts.push(actionArray.map(item => {
        return {
          ...item.payload.doc.data()
        }
      }))
    })
  }

1 Ответ

0 голосов
/ 28 марта 2020
  1. ?
  2. ?
  3. Да, я обнаружил, что это возможно! как это: this.notes.push.apply(this.notes, newNotes);
...