首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular -ng-message中的多个字段

Angular -ng-message中的多个字段
EN

Stack Overflow用户
提问于 2016-04-03 00:55:12
回答 3查看 3.3K关注 0票数 3

我正在使用ng-messages,我想知道是否可以在一段代码中检查多个字段,而不是重复检查:

所以我有:(注意checkCustom是我写的一个自定义指令)

代码语言:javascript
复制
<div ng-messages="registrationForm.field1.$error" ng-if="registrationFormValid">
    <span ng-message="required">please enter field 1</span>
    <span ng-message="checkCustom">please check custom value</span>
</div>

代码语言:javascript
复制
<div ng-messages="registrationForm.field2.$error" ng-if="registrationFormValid">
    <span ng-message="required">please enter field 1</span>
    <span ng-message="checkCustom">please check custom value</span>
</div>

然而,我更喜欢这样的东西:

代码语言:javascript
复制
<div ng-messages="registrationForm.field1.$error || registrationForm.field2.$error" ng-if="registrationFormValid">
    <span ng-message="required">please enter field 1</span>
    <span ng-message="checkCustom">please check custom value</span>
</div>

这样的事情有可能发生吗?

谢谢

EN

回答 3

Stack Overflow用户

发布于 2016-04-03 23:05:45

A form's controller有一个很方便的属性,叫做$error。这是一个对象散列,包含对具有失败验证器的控件或窗体的引用,其中它的键是错误名称(例如emailrequiredminlength等),它们的值是具有给定错误名称source的失败验证器的控件或窗体的数组。

这意味着我们可以通过检查这个$error对象是否包含一个特定的键名来全局地检查表单中的错误。

看一下这个例子:

代码语言:javascript
复制
angular.module('myApp', ['ngMessages']);
代码语言:javascript
复制
[ng-cloak] {
  display: none !important;
}
代码语言:javascript
复制
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.min.css">

<div ng-app="myApp" ng-cloak>
  <form name="myForm">
    <div class="form-group">
      <h3>Validation messages:</h3>

      <div ng-messages="myForm.$error" multiple>
        <div ng-message="required" class="alert alert-danger">There's at least one <strong>required</strong> field</div>
        <div ng-message="minlength" class="alert alert-danger">There's at least one field which doesn't fulfill the <strong>minlength</strong> condition</div>
        <div ng-message="email" class="alert alert-danger">The form contains an invalid <strong>email</strong> input</div>
      </div>
    </div>
    <div class="form-group">
      <label>Required Input 1</label>
      <input type="text" ng-model="myModel1" required>
    </div>
    <div class="form-group">
      <label>Required Input 2</label>
      <input type="text" ng-model="myModel2" required>
    </div>
    <div class="form-group">
      <label>Required Input 3 which has min-length="3"</label>
      <input type="text" ng-model="myModel3" required ng-minlength="3">
    </div>
    <div class="form-group">
      <label>Required Input 4 which is type="email"</label>
      <input type="email" ng-model="myModel4" required>
    </div>
  </form>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.3/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.3/angular-messages.min.js"></script>

票数 4
EN

Stack Overflow用户

发布于 2016-04-03 01:43:25

如果您不想在所有块中添加相同的消息,并将其添加到单个位置,您可以这样做:

  1. 添加文件中的所有消息

<!-- remote file: error-messages.html --><div ng-message="required">please enter field 1</div> <div ng-message="checkCustom">please check custom value</div>

  • Just可以将该文件包含在您想要位置。

<div ng-messages="registrationForm.field1.$error" ng-messages-include="error-messages.html"> </div>

所以代码被重用了。对于不同的错误消息,请在块中覆盖该消息。

有关更多信息,请查看这个令人惊叹的blog post。我不认为您可以在单个ng-message块中添加两个字段。

票数 0
EN

Stack Overflow用户

发布于 2017-03-05 10:58:27

只需使用

代码语言:javascript
复制
<div ng-if="registrationForm.field1.$error.required || registrationForm.field2.$error.required">
<span class="required">please enter field 1</span>
</div>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36376129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档