【发布时间】:2017-08-16 03:46:01
【问题描述】:
如果用户选择的截止日期早于所选的起始日期并且相反,我会尝试在我的日期选择器旁边显示一条错误消息。此消息应仅在用户单击提交按钮后显示。
代码:
<form name="form" ng-submit="ctrl.submit(form.$valid)" novalidate>
<div class="form-group">
<md-datepicker name="fromDate" ng-model="ctrl.fromDate" ng-required="ctrl.toDate" md-max-date="ctrl.toDate"></md-datepicker>
</div>
<div ng-messages="form.fromDate.$error" ng-if="form.$submitted">
<div ng-message="maxdate">From-date should be before to-date</div>
<div ng-message="required">Fill in from-date</div>
</div>
<div class="form-group">
<md-datepicker name="toDate" ng-model="ctrl.toDate" ng-required="ctrl.fromDate" md-min-date="ctrl.fromDate"></md-datepicker>
</div>
<div ng-messages="form.toDate.$error" ng-if="form.$submitted">
<div ng-message="mindate">To-date should be after from-date</div>
<div ng-message="required">Fill in from-date</div>
</div>
<button type="submit">Submit</button>
</form>
如果我选择 fromDate 1/1/2 和 toDate 1/1/1 然后单击提交,则仅显示所需的错误消息。 检查 $error 对象时,我看到当我单击提交时,mindate/maxdate 属性被清除。
我假设这是由于 md-datepicker 没有设置模型值,如果输入值根据要求、最小值、最大值等规则无效。
是否有可能以某种方式解决这个问题?
编辑: 我认为问题在于 Angular 在单击提交而不是输入值后使用模型值来应用表单错误。
如果我输入 1/1/2 作为 fromDate 并单击提交,然后输入 1/1/1 作为 toDate,将显示正确的错误消息。
【问题讨论】:
-
您可以尝试使用ng-model-options 并设置
{allowInvalid:true}。不知道它是否能解决您的问题,只是猜测。 -
Doesnt 似乎 allowInvalid 做了任何重要的事情。即使这样做了,我也会犹豫是否使用它,因为它会让用户设置像“abc123”这样的值(对吗?)。如果可以的话,想避免自己处理。
-
是的,我想是的。我刚刚意识到您的日期选择器没有模型,您需要将
ng-model放在md-datepicker元素上 -
好的,谢谢。我在离线环境中工作,所以我必须手动复制代码。知道我会忘记一些事情:P
-
我创建了a fiddle,它运行良好,您是否将
ngMessages作为依赖项包含在您的应用中?
标签: javascript html angularjs angular-material