2016-07-21 19 views
1

是否可以使用基于两个条件的ng-show,以及我在这种情况下是否可以使用3个条件。我知道我可以使用函数或指令来做到这一点,但它是使用ng-repeat加载视图并将数据传播到动态生成的表单元素中的时候。在这一点上,将条件添加到ng显示会更容易,因为实际输入不会被标记为无效,并且表单本身仍然会提交为有效。当表单首次加载动态创建表单中的最后一个元素时,将显示错误消息,如同它无效,直到$ touched = true并且$ veiwValue更改。ng-show在角度上使用OR和NOT条件

为了简单起见,我NG秀看起来是这样的:

<div class="list-help-block" ng-messages="emails_form.email.$error" ng-show="emails_form.email.$dirty || emails_form.email.$invalid"> 
    <div ng-messages-include="/app/views/messages.html" ></div> 
</div> 

提交表单时,这将显示在一个无效的条目,并在错误的错误消息的罚款。但是,它也会在窗体加载时显示错误消息(甚至不应该有错误)。并且只是最后一个输入动态添加到表单。

我想什么做的是这样的:

ng-show="emails_form.email.$dirty || emails_form.email.$invalid NOT mails_form.email.$pristine" 

我甚至不知道如果这是可能的,如果有可能调用一个函数来解决验证,一旦观点是完全加载并且数据已被添加到模型中。有什么建议么?

这里的整个部分被用于此:

<div ng-repeat="emails in info.instructor.instructor_emails"> 
    <ng-form name="emails_form" novalidate> 
     <div class="input-group"> 
      <span class="input-group-label"> 
      <span ng-show="info.instructor.instructor_emails.length==1">@</span> 
      <span ng-show="info.instructor.instructor_emails.length>=2"><a ng-click="updateRemoveEmail($index)"><i class="fi-x"></i></a></span> 
     </span>            
    <input ng-class="{ notvalid: submitted && emails_form.email.$invalid }"type="email" placeholder="[email protected]" name="email" ng-model="emails.email" ng-required="info.instructor.instructor_emails.length>=2"/> 
    </div> 
    <div class="list-help-block" ng-messages="emails_form.email.$error" ng-if="!emails_form.email.$pristine && (emails_form.email.$dirty || emails_form.email.$invalid)"> 
    <div ng-messages-include="/app/views/messages.html" ></div> 
</div> 

回答

0

这工作:

<div class="list-help-block" ng-messages="emails_form.email.$error" ng-if=" (!emails_form.email.$pristine && (emails_form.email.$dirty || emails_form.email.$invalid)) || (emails_form.email.$pristine && emails_form.email.$error.required) "> 
    <div ng-messages-include="/app/views/messages.html" ></div> 
</div> 

这是丑陋的,但做什么,我需要做的。感谢@ developer033指引我朝着正确的方向前进。下一次我将对所有这些垃圾代码使用自定义指令

3

作为一个建议,我建议你使用ngIf,而不是ngShow作为一个很好的做法。

按我理解你的NOT,它应该工作:

ng-if="!emails_form.email.$pristine && (emails_form.email.$dirty || emails_form.email.$invalid)" 
+0

这适用于第一次加载视图时,但在动态添加新输入时终止显示所需的错误。要查看我如何添加字段的基本思路,请查看[链接](http://plnkr.co/edit/0Xh0o82N1xQc7Qi5Mhfe?p=preview)也许这将有助于理解我是如何做到这一点的。 – OGZCoder

+0

当用户按下“添加电子邮件”时,你期望什么? – developer033

+0

我希望它添加一个需要验证并显示验证错误消息的字段,它们在添加到表单时也是$ pristine = true,所以ng-if如上所述,当这些字段是这些字段时,这些字段不会显示验证消息验证,添加和删除字段的基本代码可以在[plunker]找到(http://plnkr.co/edit/0Xh0o82N1xQc7Qi5Mhfe?p=preview)我会发布我的所有代码,但是说实话有点复杂 – OGZCoder