Angularjs: как "перезапустить" $ форматтеры, когда некоторые настройки изменены?
Настройка формата даты находится в области видимости.
Он используется фильтрами для отображения даты в метке и директивой, помещающей функцию в $ formatters из ngModel для форматирования даты на входе.
Когда настройка формата в области изменяется, дата, отображаемая через фильтры, обновляется на угловую.
Но не поля ввода через $formatters.
Единственный способ заставить это обновление, которое мы нашли, состоит в том, чтобы установить для всех полей значение null, а затем в $ timeout сбросить их до значения, отображаемого для принудительного повторного выполнения $formatters.
Есть лучший способ сделать это?
Ответ:
Объединяя ответ Сергея Моисеева и ответ 11380866, я смог добавить удовлетворительное решение в директиву.
Сохраните настройки в rootcope (как они используются из большого количества директив в изолированной области видимости) и отреагируйте на них общим кодом:
$rootScope.$watch('userSettings.dateFormat.fmt', function (newVal, oldVal, scope) {
if (newVal != oldVal) {
var viewValue = ngModelCtrl.$modelValue;
for (var i in ngModelCtrl.$formatters) {
viewValue = ngModelCtrl.$formatters[i](viewValue);
}
ngModelCtrl.$viewValue = viewValue;
ngModelCtrl.$render();
}
});
Спасибо!