#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. Ок, знайте, я понял, что вы имеете в виду 🙂 Я снова перешел к своему первому решению.