【发布时间】:2016-05-04 23:16:25
【问题描述】:
我在 AngularJS 中使用 ui-bootstrap 的 datepicker 输入。它有一个 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 不能早于 2000 年。 当页面加载时,startDate 值最初设置为今天。用户从日历中选择 31.12.1999,调用 ngBlur 方法。但是,ngModel 尚未更新。因此,验证检查今天的值并说确定。实际上,它应该使用 31.12.1999 检查 ngModel 的值。该值在输入视图上同时更改,但在后台,它是在触发模糊方法后设置的。据我所知,AngularJS 中的双向绑定通常用于此目的,但 ngBlur 必须是一个例外。
我尝试了很多东西,例如;
-
向组件添加 ng-model-options:
ng-model-options="{ updateOn: 'blur' }" 通过修改输入元素使用前置和后置链接
- 使用 ng-change 代替 ng-blur
但是,上述方法都不起作用,并且在模型更新之前仍然会运行 ng-blur。
【问题讨论】:
标签: angularjs angular-ui-bootstrap angular-ngmodel onblur