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();
                }
            });

Спасибо!

0 ответов

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