Я использую следующий код, чтобы перебрать коллекцию данных и изменить поле, если электронное письмо совпадает. Обратите внимание, что код вылетает на съемочной площадке. Итерация работает просто отлично. afs инициализируется как AngularFirestore

onChangeRole(email) {
  this.afs.collection("users").get().toPromise().then(function (querySnapshot) {
    querySnapshot.forEach(function (doc) {
      // doc.data() is never undefined for query doc snapshots
      console.log(doc.id, " => ", doc.data());

      if (doc.data().email == email) {
        this.afs.collection("users").doc(doc.id).set({
          role: 2
        })
      }
    });
  });
}

Но я получаю:

ОШИБКА Ошибка: Uncaught (в обещании): TypeError: Невозможно прочитать свойство 'afs' из неопределенного TypeError: Невозможно прочитать свойство 'afs' из неопределенного

Где afs AngularFirestore

import { AngularFirestore, AngularFirestoreCollection , AngularFirestoreDocument} from '@angular/fire/firestore';
0
mouchin777 12 Апр 2019 в 14:20

2 ответа

Лучший ответ

Это должно работать

onChangeRole(email) {
  const usersColl = this.afs.collection("users");
  usersColl.get().toPromise().then(function (querySnapshot) {
    querySnapshot.forEach(function (doc) {
      console.log(doc.id, " => ", doc.data());
      if (doc.data().email == email) {
        usersColl.doc(doc.id).set(
          { role: 2 },
          { merge: true }
        )
      }
    });
  });
}
0
Sourav Dutta 12 Апр 2019 в 12:03

Вы должны инициализировать его в конструкторе, тогда вы сможете использовать его с this.afs , как вы пытаетесь.

За пример:

constructor(private afs: AngularFirestore) { }

РЕДАКТИРОВАТЬ: изменить функциональное слово для использования функции стрелки:

this.afs.collection("users").get().toPromise().then( querySnapshot => {
      querySnapshot.forEach( doc => {
        // doc.data() is never undefined for query doc snapshots
        console.log(doc.id, " => ", doc.data());

        if (doc.data().email == email) {
          this.afs.collection("users").doc(doc.id).set({
            role: 2
          })
        }
      });
    });
1
RadW2020 12 Апр 2019 в 11:53