Как вставить несколько объектов одновременно с Angularfire2? - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть приложение Angular 7 , интегрированное с базой данных Cloud Firestore .

Я использую angularfire2 для добавления объектов в базу данных.

У меня вопрос о добавлении нескольких объектов одновременно в Cloud Firestore, потому что я в настоящее время перебираю объекты из Array и вызываю метод add().

В моей службе я извлекаю данные с помощью snapShotChanges() и обновляю Observable данными в моем компоненте всякий раз, когда происходят изменения в состоянии, оно изменяет значения на экране для пользователя.

Если я прохожу через Array с объектами и для каждого объекта я вызываю метод add(), это состояние изменяется путем получения нового значения и обновления для пользователя на экране.

Вкл.экран обновляется каждый раз, когда вызывается метод add() ... Но проблема в том, что при обновлении данных таким образом и изменении на экране кажется, что обновление данных происходит медленно.

Я бы хотел, чтобы состояние snapshotChanges() изменилось только после того, как я завершил добавление всех объектов Array ... Таким образом, если я добавлю 64 записей , он будет обновляться на экране только один раз.

Есть ли способ, которым мне не нужно проходить через массив объектов для добавления в хранилище облаков с помощью angularfire2?

Решение:

  1. Изменение состояния наблюдаемого только после завершения добавления всех объектов массива ... Обновите один раз на экране для пользователя.

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);
}
...