Свойство объекта JSData, вызывающее бесконечный цикл

У меня есть свойство данных, которое должно быть представлено на бэкэнде, как это

YYYY-MM-DD

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

Моя модель JSData выглядит следующим образом.

function BlogFactory (DS) {
  return DS.defineResource({
    name: 'Blog',
    endpoint: 'blog',
    idAttribute: 'slug',
    computed: {
      _publish_at: {
        enumerable: true,
        get: () => {
          if (this.publish_at) {
            return moment(this.publish_at).toDate();
          }
        },
        set: (v) => {
          this.publish_at = moment(v).format('YYYY-MM-DD');
        }
      }
    }
  });
}

Мой HTML выглядит так. Блог является объектом блога.

  <md-datepicker ng-model="blog._publish_at"
      ng-model-options="{'getterSetter': true}"></md-datepicker>

Это вызывает эту ошибку.

[$rootScope:infdig] 10 $digest() iterations reached. Aborting!

Кто-нибудь знает, как это исправить? Спасибо!

1 ответ

Я полагаю, что это из-за грязной проверки Angular. Во время каждого дайджест-цикла Angular проверяет текущее значение blog._publish_at равно значению предыдущего цикла, и поскольку вы используете функцию получения ES5, которая вызывается при каждом обращении к свойству, Angular видит новый объект объекта Date в каждом цикле дайджеста и, следовательно, считает, что значение меняется,

Вам может понадобиться переместить логику получения / установки для этого конкретного свойства из экземпляра модели в представление (ваш контроллер / директиву) и в этом случае отказаться от использования геттеров / установщиков ES5.

Другие вопросы по тегам