Angular6 - ошибка только в Safari - TypeError undefined не является объектом - PullRequest
2 голосов
/ 09 марта 2020

Это происходит только в Safari, и я отследил его до какой строки, но все, что я пытался сделать, чтобы обойти это, не помогает.

Он отлично работает в Chrome и Firefox.

Именно эта строка вызывает проблему

this.preppedEvents[tmpDate.getFullYear()][tmpDate.getMonth()]

Сначала я подумал, что, возможно, это было, когда я явно установил значение для индекса 0, но я не уверен, что это решение.

Я получаю сообщение об ошибке: «TypeError undefined не является объектом»

Я пытался инициализировать объект preppedEvents фиктивными данными перед его обновлением. Ничего не помогает.


  public constructor(private _jKiruService: JKiruService) { }

  public resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    return this._jKiruService
      .addRequest('Calendar', 'getDisplayable').runl();
  }
}
@Component({
  selector: 'app-learn-calendar',
  templateUrl: './learn-calendar.component.html',
  styleUrls: ['./learn-calendar.component.scss']
})
export class LearnCalendarComponent implements OnInit, OnDestroy {
  public preppedEvents = [];
  private _events = [];
  private _subscriptions: Subscription[] = [];

  constructor(
    private _route: ActivatedRoute,
    private _jKiruService: JKiruService,
    private _subscriber: SubscriptionService
  ) {
    this._subscriptions = this._subscriber.getSubscriber();
  }

  ngOnInit() {
    this._subscriptions['resolver'] = this._route.params.subscribe((res) => {
      if (res) {
        this._events = this._jKiruService.pull('calendar_event', true);
      }
    });
    this.prepEvents();
  }


  public prepEvents() {
    const currentDateObj = new Date();

    // Initial Loop
    for (let y = currentDateObj.getFullYear(); y < currentDateObj.getFullYear() + 2; y++) {
      this.preppedEvents[y] = [];

      for (let i = 0; i < 12; i++) {
        this.preppedEvents[y][i] = { month: OutwardDate.decodeMonth(i), events: [] };

      }
    }


    for (const event of this._events) {

      for (const day of event.events) {

        /**
         * important to note:
         * because of 0 index of month place, we need to add 1 to the display version
         * also need to format date from 2020-02-15 to 2020,02,15 to get accurate new date object
         */

        let tmpDate = new Date(day.day.replace(/-/g, ','));

            if (typeof this.preppedEvents[tmpDate.getFullYear()][tmpDate.getMonth()] === 'undefined' || this.preppedEvents[tmpDate.getFullYear()][tmpDate.getMonth()] === 'undefined' ) {
              return;
            }

        let monthDay = (tmpDate.getDate() < 10 ? '0' : '') + tmpDate.getDate();

        this.preppedEvents[tmpDate.getFullYear()][tmpDate.getMonth()].events.push({
          title: event.title,
          description: event.description,
          day: '' + (tmpDate.getMonth() + 1) + '/' + (monthDay) + '/' + tmpDate.getFullYear(), // we only need to add the 1 here to the month because its for display purposes, otherwise its index is correct
          start_time: day.start,
          end_time: day.end,
          time_description: day.description.replace(/<br>/g, ' ')
        });
      }
    }


    for (let y = currentDateObj.getFullYear(); y < currentDateObj.getFullYear() + 2; y++) {
      for (let i = 0; i < 12; i++) {

        this.preppedEvents[y][i].events = qsort2(this.preppedEvents[y][i].events, ['day', 'start_time']);
      }
    }

  }
}

Вот скриншот ошибки и где она появляется

enter image description here

**** обновлено со ссылкой ****

Вот ссылка на стек, убедитесь, что вы находитесь в Safari, чтобы ошибка воспроизводила https://stackblitz.com/edit/angular-ya3gzk

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