Angularjs 验证 - bootstrap 无法识别日期选择器输入

Angularjs validation - bootstrap datepicker input is not recognized

如果您阅读以下 Angularjs 验证,您就会明白: 如果用户交互但未手动填写日期,则会显示消息。 问题是当使用日期选择器填充日期时,Angularjs 无法识别输入并且仍然认为 $invalid 为真,因此消息仍然存在 confusing/problem 尽管日期已经使用日期选择器填充!

<div class="form-group" ng-class="{ 'has-error' : AddForm.Birthdate.$invalid && !AddForm.Birthdate.$pristine }"> 
     <input type="text"  required data-provide="datepicker"  class="form-control" name="Birthdate" ng-model="Birthdate"  />
     <span ng-show="AddForm.Birthdate.$invalid  && !AddForm.Birthdate.$pristine" class="help-block" >
  Birthdate is required.
     </span>
</div>

您可以在提交表单之前对其进行验证,或者在您的日期选择器上挂接一个侦听器以手动设置模型 属性 出生日期值。

似乎bootstrap日期选择器是建立在JQuery日期选择器之上的,手动设置值是一种不好的做法,您可以参考: Update Angular model after setting input value with jQuery

更好的方法是使用一些内置的 angular 组件,例如来自:

https://angular-ui.github.io/bootstrap/ http://dalelotts.github.io/angular-bootstrap-datetimepicker/ https://github.com/dalelotts/angular-bootstrap-datetimepicker

我发现了解决这个问题的新方法-

首先为该输入框创建一个 id,然后创建一个函数 $scope.assign(),它只是将 id 值分配给该输入的模型。 像这样的东西-

$scope.assign = function() {
$scope.modelValue = $('#idName').val();
}

现在使用 ng-bind="assign()" 到您的输入框。

它对我有用:)

遇到了这个问题,这是因为您使用的选择器是建立在 Jquery 之上的,在更新时仍然无法被范围检测到。

对于我的新项目,我添加了另一个库,它非常棒。 请参阅文档 http://dalelotts.github.io/angular-bootstrap-datetimepicker

提供我添加了包装器指令的代码段

我之前的回答是基于变通方法,因为在回答那个时候我对 angular 还很陌生,现在我建议不要使用构建在上面的库Angular 项目中的 Jquery。相反,更喜欢 angular 个库。

进入主题- 对于日期时间选择器,我找到了一个非常好的库

https://github.com/indrimuska/angular-moment-picker

您可以在内置 angular 中找到更多库,但我发现它对其他验证也非常有用,例如最小日期、最大日期验证。

使用这个库肯定会解决验证问题,而且它是纯粹的 Angular 方式。