Я создаю нумерацию страниц для своего приложения 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()
}
})
})
}
И в представлении:
Показать новые сообщения ☀
Мои вопросы:
- есть лучший способ сделать это? Я вижу много повторений кода.
- Мне нужно позаботиться о событии отмены подписки, чтобы избежать снижения производительности?
- Можно ли использовать что-то вроде
.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()
}
}))
})
}