2015-08-28 72 views
0

我正在寻找一些指导。ng-repeat表单项目的AngularJS验证

下面是一些代码,我有:

<div ng-repeat="q in questions"> 
    <div class="panel panel-info"> 
     <div class="panel-heading"> 
      <h3 class="panel-title"><span ng-bind="q.questionText"></span></h3> 
     </div> 
     <div class="panel-body"> 
      <answer-field question="q"></answer-field> 
     </div> 
    </div> 
</div> 

answer-field是一个指令,而且基本上取决于什么q是某种类型的表单域将显示像select箱或input text箱等。

例如,选择框可能是:

<div class='form-group'> 
    <select class='form-control' ng-model='question.answer' ng-options='item for item in question.choices' required> 
     <option value=''>Select an option...</option> 
    </select> 
</div> 

且文本字段可能是:

<div class='form-group'> 
    <input class='form-control' type='text' ng-model='question.answer' required /> 
</div> 

正如你所看到的,我已经加入required,这是否在技术上的工作。浏览器会显示错误,说如果我尝试提交,我需要填写该字段。

我想虽然是更美观一点。 Bootstrap例如有has-error。如果我可以使form-group显示has-error,而不是默认浏览器“填写此字段”消息,并且理想情况下显示确实有错误的项目列表,则会很好。

我该怎么办?

回答

0

Angular has novalidate。它抑制了原生HTML验证,允许你自己放置。至于如何显示自定义错误,它也在该页面中。

+0

第一div如果我理解正确,' ng-invalid'将应用于无效的表单域?如果这是正确的,我怎么能在form-group上显示'has-error'? – b85411

0

我经常喜欢如下显示自定义错误消息:

<div class="form-group"> 
    <label for="inputPassword" class="control-label">Password</label> 
    <input type="password" id="inputPassword" name="password" class="form-control" ng-model="user.password" placeholder="Password" required> 
    </div> 

    <div class="form-group has-error"> 
    <p class="help-block" ng-show="form.password.$error.required && submitted"> 
     Please enter password. 
    </p> 
    </div> 

,或者您可以使用ng-classhas-error类追加到基于表达式

+0

虽然我正在使用ng-repeat,所以我的输入字段没有'name'属性。我希望以你所描述的方式显示它,但我只是不知道如何做'ng-show =“form.password。$ error.required &&提交的''相当于''因为我没有名称就像我的每个表单域上的密码一样。 – b85411