Свойство объекта 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.