Попытка добавить свойство к объекту внутри наблюдаемого - PullRequest
0 голосов
/ 26 марта 2019

Довольно простая ситуация в соответствии с заголовком, при попытке добавить свойство ParticipatingType к объекту события, если человек посещает (поэтому я могу изменить статус в представлении).

Другие примечания, я работаю с Angularfire2 и возвращенные данные являются наблюдаемым массивом Event [].Когда я изменяю возврат на return (console.log({ ...event, attendingType: currentUser.type } as eventWithAttendance));, он печатает дополнительное свойство штраф.

Вот интерфейс

export interface Event {
  schoolId: string;
  eventId: string;
  name: string;
  date: Date;
  timeStart: number;
  timeEnd: number;
  volunteersRequired: boolean;
  attendance?: Array<EventUser>;
  imageUrl: string;
  contactName: string;
  contactPhone: number;
  contactEmail: string;
  description: string;
}

export interface EventUser {
  id: string;
  email: string;
  name: string;
  type: ATTENDANCE;
}

export enum ATTENDANCE {
  attending = 'attending',
  notAttending = 'notAttending',
  volunteering = 'volunteering'
}

, а вот код для файла ts

interface eventWithAttendance extends Event {
  attendingType: ATTENDANCE;
}

ionViewDidLoad() {
    this.activeSchool = this.data.activeSchool;

    //this.events = this.data.getEvents(this.activeSchool.schoolId).pipe();

    this.auth.user.subscribe((user) => {
      this.user = user;
    });

    this.events = this.data.getEvents(this.activeSchool.schoolId)
      .pipe(
        map((events) => {
            events.map( (event) => {
              let currentUser = event.attendance.find(user => user.id === this.user.uid);
              if(currentUser) {
                return ({ ...event, attendingType: currentUser.type } as eventWithAttendance);
              } else {
                return event;
              }
            });

          return events as eventWithAttendance[];
        })
      );


    // Not a long term solution
    this.currentDate = new Date().getTime(); // so we don't display old events
  }

1 Ответ

1 голос
/ 26 марта 2019

Проблема в том, что .map в массиве не меняет исходный массив, но возвращает новый массив.

Итак, если вы измените:

events.map( (event) => {

Кому:

const updatedEvents = events.map( (event) => {

А затем измените оператор возврата на:

return updatedEvents as eventWithAttendance[];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...