AngularFire2: создать документ и задать массив карт

#arrays #typescript #google-cloud-firestore #angularfire2 #angularfire

#массивы #typescript #google-облако-firestore #angularfire2 #angularfire

Вопрос:

Запрошенное поведение:
Я хотел бы создать AngularService, который добавляет документ в Firestore с двумя полями. Первое поле — это карта, которая заполняется пользовательскими данными. Второе поле представляет собой массив карт. Он должен получить карту из первого поля в качестве первого элемента.

Текущее состояние
Функция успешно создаст и заполнит документ, если я только добавлю карту (первое поле) и закомментирую массив карт (второе поле).

проблема
Если я добавлю код для настройки массива, функция больше не будет работать. Я получаю следующую ошибку, даже если оба поля вызываются с одинаковыми данными:

Ошибка FirebaseError: функция DocumentReference.set() вызывается с недопустимыми данными. Неподдерживаемое значение поля: не определено (найдено в field groupExecutiveBoard)

Как я могу это исправить? Как я могу создать массив карт и поместить в него первую карту?

Моя модель:

 export interface Group {

    groupLeader?: {
        groupLeaderID?: string;
        groupLeaderName?: string;
        groupLeaderImage?: string;
    };
    
    //array
    groupExecutiveBoard?: {
        boardMemberID?: string;
        boardMemberName?: string;
        boardMemberImage?: string;
    }[];
    
}  

Мой сервис

 constructor(private angularFirestore: AngularFirestore) { }

addGroup(author: User) {
  const groupsCollection = this.angularFirestore.collection<GroupID>('groups');

  groupsCollection.add({

    // sets groupleader if "GroupExecutiveBoard" is commented out
    groupLeader: {
      groupLeaderID: author.uid,
      groupLeaderName: author.displayName,
      groupLeaderImage: author.profilePhoto
    },

    //should set user data as first array item. Does not work
    groupExecutiveBoard: {
      boardMemberId: author.uid,
      boardMemberName: author.displayName,
      boardMemberImage: author.profilePhoto
    }[0],

  });
}  

Ответ №1:

Попробуйте это:

 groupLeader: {
      groupLeaderID: author.uid,
      groupLeaderName: author.displayName,
      groupLeaderImage: author.profilePhoto
    },
groupExecutiveBoard: [{
      boardMemberId: author.uid,
      boardMemberName: author.displayName,
      boardMemberImage: author.profilePhoto
}],
  

Комментарии:

1. К сожалению, это не работает. Затем я получаю несколько ссылок ts — включая The expected type comes from property 'groupExecutiveBoard' which is declared here on type 'GroupID' . Насколько я знаю, это означает. что я не могу назначить вам подход к типу массива object[]

2. Я обновил свой ответ. Попробуйте заменить фигурные скобки curley квадратными скобками

3. Мне очень жаль. Я думаю, что ваше первое решение было правильным. Я допустил опечатку в описании моего поста здесь (в моем коде последняя буква boardMemberID — заглавная «D», здесь это «d»), а затем скопировал вставленное ваше решение в мой код. Можете ли вы снова предложить свое первое решение? Тогда я мог бы пометить его как решаемый 🙂 Спасибо уже за вашу помощь!

4. Но вы пробовали обновление? Потому что это создает карту в массиве. Разве это не то, что вы пытались сделать, или для вас это нормально со строками?

5. Ок, знайте, я понял, что вы имеете в виду 🙂 Я снова перешел к своему первому решению.