如何使必填字段的ngMessage仅在脏或提交表单时显示?

Nic*_*ann 43 forms angularjs

我正在使用AngularJS 1.3.0 RC0和angular-messages.当表单最初加载和原始时,ng-messages尽职尽责地显示那些"必需"字段的错误消息.因此,新加载的表单页面将填充错误消息.这不是我想要的.如何使必填字段的ngMessage仅在这些字段变脏或提交表单时显示?

我已经阅读了官方文档,没有任何线索.并尝试在ng-messages div中放置"ng-show ="fieldName.$ dirty"",但是没有用.任何帮助将非常感谢!

Eoi*_*nii 90

使用该ng-if属性检查具有$dirty的标记ng-messages.

示例:

<div ng-messages='myForm.myControl.$error' ng-if='myForm.myControl.$dirty'>
    <div ng-message='required'>Required field</div>
</div>
Run Code Online (Sandbox Code Playgroud)


Dar*_*ren 20

最好的方法是触及$:

<div class="help-block" ng-messages="userForm.name.$error" ng-show="userForm.name.$touched">
    ...
</div>
Run Code Online (Sandbox Code Playgroud)


Joh*_*oop 14

只有在脏的时候:

<div ng-messages="myForm.myField.$dirty && myForm.myField.$error">
    <div ng-message='required'>Required field</div>
</div>
Run Code Online (Sandbox Code Playgroud)

仅在提交表单时:

<div ng-messages="myForm.$submitted && myForm.myField.$error">
    <div ng-message='required'>Required field</div>
</div>
Run Code Online (Sandbox Code Playgroud)


LT8*_*T86 12

而不是使用ng-if建议你可以做类似......

<div ng-messages='myForm.myControl.$error' ng-if='submitted'>
   <div ng-message='required'>Required field</div>
</div>
Run Code Online (Sandbox Code Playgroud)

在提交按钮上添加:

ng-click="submitted=true"
Run Code Online (Sandbox Code Playgroud)

当您再次输入时,您可能希望将'$ scope.submitted'更改回false,因此您可以将其添加到文本/电子邮件输入中:

ng-keyup="submitted=false"
Run Code Online (Sandbox Code Playgroud)

这样只有提交按钮会将'$ scope.submitted'更改为true,而您执行的其他操作都会将其设置为false,因此会隐藏您的错误消息,直到您单击提交按钮.


Ali*_*avi 5

我不希望在出现任何错误或用户试图提交页面之前显示我的消息,并且上述解决方案均无效.

最后我成功地完成了这个:

<form name='frmUser'>
..........
..........
<div ng-messages="frmUser.firstName.$error" 
     ng-show='frmUser.$submitted || frmUser.firstName.$dirty' role="alert">
      <div ng-message="required" class="err">Required</div>
      <div ng-message="maxlength" class="err">Maximum 50 characters.</div>
</div>
<input ng-model="model.first"
       name="firstName"
       type="text"
       ng-required="true"
       ng-maxlength="50"
       placeholder="Enter your first name" />

</form>
Run Code Online (Sandbox Code Playgroud)

如果键入任何无效的内容,则显示错误

如果您尝试提交页面但未提供必填字段,则会显示错误.