У меня есть приложение Angular 7 , интегрированное с базой данных Cloud Firestore .
Я использую angularfire2 для добавления объектов в базу данных.
У меня вопрос о добавлении нескольких объектов одновременно в Cloud Firestore, потому что я в настоящее время перебираю объекты из Array
и вызываю метод add()
.
В моей службе я извлекаю данные с помощью snapShotChanges()
и обновляю Observable
данными в моем компоненте всякий раз, когда происходят изменения в состоянии, оно изменяет значения на экране для пользователя.
Если я прохожу через Array
с объектами и для каждого объекта я вызываю метод add()
, это состояние изменяется путем получения нового значения и обновления для пользователя на экране.
Вкл.экран обновляется каждый раз, когда вызывается метод add()
... Но проблема в том, что при обновлении данных таким образом и изменении на экране кажется, что обновление данных происходит медленно.
Я бы хотел, чтобы состояние snapshotChanges()
изменилось только после того, как я завершил добавление всех объектов Array ... Таким образом, если я добавлю 64 записей , он будет обновляться на экране только один раз.
Есть ли способ, которым мне не нужно проходить через массив объектов для добавления в хранилище облаков с помощью angularfire2?
Решение:
- Изменение состояния наблюдаемого только после завершения добавления всех объектов массива ... Обновите один раз на экране для пользователя.
my.service.ts
const startOfMonth = moment(new Date()).startOf('month').toDate();
const endOfMonth = moment(new Date()).endOf('month').toDate();
this._angularFirestore.collection(this.trans, ref =>
ref.orderBy('date'))
.snapshotChanges()
.pipe(
map(actions => {
return actions.map(a => {
const data = a.payload.doc.data() as any;
data.id = a.payload.doc.id;
return data;
});
})
).subscribe((trans: Transaction[]) => {
this.onTransactionsChanged.next(trans);
});
for (trans of transList) {
this._angularFirestore.collection(this.trans).add(trans);
}