Я использую входной сигнал yi-bootstrap datepicker с помощью AngularJS. Он имеет ngModel и метод validatioon связанный с ngBlur события:ngModel обновлен после ngBlur
<input id="startDate" type="text" ng-model="myCtrl.startDate" ng-blur="myCtrl.validateDate()"/>
Метод проверки провер ет ngModel в соответствии с набором правил в контроллере, и предупреждает, если это необходимо. Вот соответствующая часть контроллера:
var vm = this;
vm.startDate = new Date();
vm.minStartDate = new Date(2000,1,1);
vm.validateDate = function(){
if(vm.startDate < vm.minStartDate)
alert("Start date can't be earliar than 2000");
}
Проблема заключается в том, что метод проверки выполняется перед обновлением модели. Пример сценария выглядит следующим образом:
Правило: startDate не может быть раньше года . Когда страница загружается, значение startDate изначально установлено на сегодняшний день. Пользователь выбирает 31.12.1999 из календаря, вызывается метод ngBlur. Однако ngModel еще не обновлен. Таким образом, проверка проверяет сегодняшнее значение и говорит «ОК». Фактически, он должен был проверить значение ngModel с 31.12.1999. Значение изменяется одновременно на входе, но в фоновом режиме оно устанавливается после запуска метода размытия. Насколько мне известно, двусторонняя привязка в AngularJS обычно служит для этой цели, но ngBlur должен быть исключением.
Я пробовал много вещей, таких как;
Добавление нг-модели-варианты компонента:
ng-model-options="{ updateOn: 'blur' }"
Используя до и после связывания путем изменения входного элемента
- Использование нг-изменение вместо нг-размытия
Однако ни одно из вышеперечисленных работ не работает, и все еще ng-blur работает до обновлена модель.