【问题标题】:Cant detect <form>.$error.mindate when <form>.$submitted<form>.$submitted 时无法检测到 <form>.$error.mindate
【发布时间】: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


【解决方案1】:

似乎当表单加载时 toDate 和 fromDate 是空白的!我对吗?? 如果 toDate 和 fromDate 为空,请分别用 dayBeforeDate 和 currentDate 初始化 fromDate 和 toDate。

喜欢

从日期 - 2017 年 3 月 22 日

至今 - 2017 年 3 月 23 日

【讨论】:

  • 是的,fromDate 和 toDate 在页面加载时都是undefined。虽然初始化它们不会解决任何问题,因为 md-datepicker 不允许我更改模型,如果它是无效值。
  • 当页面加载时会发生什么 toDate 和 fromDate 验证陷入僵局
猜你喜欢
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-05-22
  • 2018-03-14
  • 2018-11-16
  • 2019-01-22
  • 1970-01-01
相关资源
最近更新 更多