Свойство ‘withConverter’ не существует для типа ‘AngularFirestoreDocument

#angular #firebase #google-cloud-firestore #angularfire

#angular #firebase #google-cloud-firestore #angularfire

Вопрос:

Я создаю веб-приложение, используя ionic angular и firestore. Когда я хочу получить определенные поля документа, я знаю, что мне нужно сопоставить с объектом, и это то, что я сделал.

 export interface notificationModel{
    notificationId?: string;
    message?: string;
    contactId?: string;
}
export class userModel{
    userId?: string;
    name?: string;
    notifications?: notificationModel[];
    contacts?: string[];

    constructor (userId, name, notifications,contacts) {
        this.name = name;
        this.userId = userId;
        this.notifications = notifications;
        this.contacts = contacts;
    }

    getContacts(){
        return this.contacts;
    }
}
  

Здесь коллекция userinfo хранит имена пользователей, список контактов, который представляет собой массив строк, и другую коллекцию, называемую notifications типа notifications.

Это мой конвертер

 var userConverter = {
    toFirestore: function(userModel) {
      return {
        userId: userModel.userId,
        name: userModel.name,
        notifications: userModel.notifications,
        contacts: userModel.contacts,
        }
    },
    fromFirestore: function(snapshot, options){
      const data = snapshot.data(options);
      return new userModel(data.userId, data.name, data.notifications,data.contacts)
    }
  

Я хочу получить пользователя и сопоставить его с моей моделью пользователя / классом, чтобы я мог свободно использовать данные, но, похоже, могу это сделать.

это один из моих методов получения контактов пользователя, но он выдает эту ошибку

Свойство ‘withConverter’ не существует для типа ‘AngularFirestoreDocument

  this.userInfosCollection.doc(userId)
    .withConverter(userConverter)
    .get().then(function(doc) {
      if (doc.exists){
        // Convert to City object
        var user = doc.data();
        // Use a City instance method
        console.log(user.getContacts());
      } else {
        console.log("No such document!")
      }}).catch(function(error) {
        console.log("Error getting document:", error)
      });

    }
  

помимо решения этой ошибки, я хотел бы узнать о лучших методах хранения и извлечения данных, подобных этому. Спасибо!

Ответ №1:

Как указано в этом выпуске здесь, что он открыт в официальном репозитории AngularFire, к сожалению, withConverter() метод не поддерживается в библиотеке Angular.

Хотя я бы рекомендовал вам проверить проблему для получения более подробной информации, ниже также приведен код, который должен предоставить вам возможный обходной путь, который может помочь вам, если вам действительно нужно использовать конвертер.

 getCollectionWithConverter(): CollectionReference {
  return this.db.firestore.collection("<collection>").withConverter(this.converter)
}

createCourse(course: Course) {
  return this.db.collection(this.getCollectionWithConverter()).add(course);
}
  

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