#angularjs
#angularjs
Вопрос:
Настройка формата даты находится в области видимости.
Он используется фильтрами для отображения дат в label и директивой, помещающей функцию в $formatters из ngModel для форматирования даты во входных данных.
При изменении настройки формата в области видимости дата, отображаемая через фильтры, обновляется angular.
Но не поля ввода через $ formatters.
Единственный способ принудительно обновить это, который мы нашли, — установить для всех полей значение null, затем в $ timeout сбросить их до значения для отображения, чтобы принудительно выполнить повторное выполнение $ formatters.
Есть ли лучший способ сделать это?
Ответ:
Объединив ответ от Сергея Моисеева и ответ на 11380866, я смог добавить удовлетворяющее решение в директиву.
Сохраните настройки в rootscope (как это используется во многих директивах в ограниченной области) и реагируйте на это с помощью общего кода:
$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();
}
});
Спасибо!
Комментарии:
1. Можем ли мы увидеть ваш код? Довольно сложно понять, что вы делаете без этого.
2. github.com/angular/angular.js/issues/3407
3. Это здорово. Обратите внимание, что ваша скрипка работает, добавляя этот код в ваши часы:
code
var viewValue = ngModel.$modelValue; для (var i в ctrl.$formatters) { viewValue = ngModel.$formatters[i](viewValue); } ngModel.$viewValue = viewValue; ngModel.$render();