我已经使用模式实现了一个表单。表单可以具有“创建”或“编辑”模式。根据模式,它在布局的一个位置或另一个位置显示一些div。 Div内容是相同的,它的输入和一些验证消息。
以下是简化示例。
查看:
<div ng-app="myApp">
<div ng-controller="MyCtrl">
<form name="editForm">
<div ng-show='mode == "Edit"'>
<div class="form-group" ng-class="{true:'has-error',false:''}[editForm.FirstName.$valid === false && editForm.FirstName.$dirty]">
<input type="text" ng-model="foo" ng-maxlength="5" name="foo" required />
<div class="help-block" ng-messages="editForm.foo.$error" ng-if="editForm.foo.$dirty">
<p ng-message="required">Required</p>
<p ng-message="maxlength">Too long</p>
</div>
</div>
</div>
<div ng-show='mode == "Create"'>
<div class="form-group" ng-class="{true:'has-error',false:''}[edit.foo.$valid === false && edit.foo.$dirty]">
<input type="text" ng-model="foo" ng-maxlength="5" name="foo" required />
<div class="help-block" ng-messages="editForm.foo.$error" ng-if="editForm.foo.$dirty">
<p ng-message="required">Required</p>
<p ng-message="maxlength">Too long</p>
</div>
</div>
</div>
</form>
<div>
Mode: {{mode}} <br>
Value: {{foo}} <br>
Is form valid: {{editForm.foo.$valid}} <br>
</div>
</div>
</div>
控制器:
var myApp = angular.module('myApp',['ngMessages']);
myApp.controller('MyCtrl',function($scope){
$scope.mode = 'Edit';
});
Here's JSFiddle with working example
问题是 - 验证消息仅在显示最后一个输入时才能正常工作。在编辑模式下 - 即使它是相同的 - 消息无法正确显示。
答案 0 :(得分:1)
而不是ng-show
使用ng-if
指令。
ng-show
会导致浏览器在div
表达式被评估为ng-hide
的元素上呈现ng-show
个false
个元素。
ng-if
表达式为div
, ng-if
会导致false
元素无法呈现。