繁体   English   中英

AngularJS自定义表单验证错误消息

[英]AngularJS custom form validation error message

有没有办法在自定义表单验证中传递错误消息?

例如,我有一个检查用户名的指令。 有三种可能的结果:

  1. 这是有效的
  2. 它无效,因为它不是一个好的用户名(“this.is-invalid”)
  3. 它无效,因为它已被使用

我有一个像(简化伪html)的指令:

<input type="text" namecheck></input><span ng-show="name.$error.namecheck">You had an error {{ error }}</span>

在我的自定义指令中,我可以做到

// check for a conflict and valid name here
ngModel.$setValidity("namecheck",false);

但是,如何传递错误消息,指出问题是冲突还是无效的名称? 有什么像ngModel.$setValidityErrorMessage()

正如我在评论中写的那样,我只是想通了。 我只需要使用不同的有效性标志。 没有什么说我必须在$setValidity()使用相同的键作为指令的名称!

<span ng-show="name.$error.nameinvalid">This is not a valid username, it must be alphanmueric</span>
<span ng-show="name.$error.nametaken">Sorry, the username {{ name }} is already taken</span>

并在指令中

// if I got a 409
ngModel.$setValidity("nametaken",false);
// if I got a 400
ngModel.$setValidity("nameinvalid",false);

$error的名称错误消息!

在表单元素上设置有效性只是简单地将相应的类添加到元素,然后可以使用该类来设置元素的样式以指示错误。 没有任何错误消息指示元素无效的原因。 Angular不提供这种支持。

您可能已经注意到在required字段为空时弹出的错误消息? 在chrome中,他们会说:“请填写此字段”或类似内容。 这些是浏览器特定的,并且与角度无关。

您必须推出自己的错误消息服务。 您可以使用相同的ng-invalid类来检查表单元素何时无效并显示基于此的错误消息,但Angular不提供开箱即用的功能。

角度文档(在此处找到)中有一个示例,显示了一种可以执行此操作的方法。

更新:

从Angular 1.3开始,现在支持ngMessagengMessages指令。 这些新指令试图使表单验证和错误消息传递不那么麻烦。 这些指令的角度文档在这里 查看链接以获取更多详细信息。

在我看来,您的三个规则包括客户端和服务器验证。 我将验证客户端的前两个,以及服务器端的验证最后一个规则。 因为用户名是重复的,所以我们得到它,直到我们将其发布到服务器。 所以,我的做法如下:

 <div class="col-md-offset-3 col-md-9" ng-show="detailForm.$error && detailForm.name.$invalid && (detailForm.name.$touched || detailForm.$submitted)"
                     ng-messages="detailForm.name.$error">
          <div class="error-message" ng-message="required">the field is required </div>
          <div class="error-message" ng-message="maxlength">you are too lang</div>
          <div class="error-message" ng-message="pattern">your format is incorrect </div>
 </div>
 <div class="col-md-offset-3 col-md-9" ng-show="serverError && serverError.name">
          <div class="error-message">{{serverError.name}}</div>
 </div>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM