2015-06-14 55 views
1

我有一个包含3个输入字段的表单。但我也想用其他页面的形式。所以我减少了表格。如何减少AngularJS中的表单验证字段

景观:

<form class="form-horizontal" name="editForm" novalidate> 
    <div ng-repeat="elements in form"> 
    <div class="form-group-sm has-feedback" ng-repeat="el in elements.items" ng-class="{ 'has-error' : hasError(editForm), 'has-success' : hasSuccess(editForm) }"> 
     <label class="control-label" for="{{el.id}}">{{el.label}}</label> 
     <input type="{{el.fieldType}}" 
       class="form-control" 
       placeholder="{{el.label}}" 
       name="{{el.name}}" 
       id="{{el.id}}" 
       ng-model="selected[el.model]" 
       ng-disabled="{{el.disabled}}" 
       ng-pattern="el.pattern" 
       ng-required="{{el.required}}" 
     /> 
     <p class="help-block" ng-show="editForm.{{el.name}}.$error.required && editForm.{{el.name}}.$touched">Field is required.</p> 
     <p class="help-block" ng-show="editForm.{{el.name}}.$error.pattern">Thats the pattern error message.</p> 
    </div> 
</div>  
</form> 

我希望外包的错误信息/确认的功能,在开始的时候,我如下定义的视图。 p-Tag中的错误消息不起作用。

我已经试过这在我的Ctrl键:

$scope.hasError = function (form) { 
    return form.Firstname.$invalid && form.Firstname.$dirty; 
} 

$scope.hasSuccess = function (form) { 
    return form.Firstname.$valid; 
} 

这仅适用于inputfield名字是。但是我怎样才能为所有字段(名字,姓氏,年龄)动态地定义呢?

回答

1

传递动态字段名称到功能:

ng-class="{ 'has-error' : hasError(editForm, el.name), 'has-success' : hasSuccess(editForm, el.name) }" 

和在控制器使用括号符号来访问变量ngModelController:

$scope.hasError = function (form, name) { 
    return form[name].$invalid && form[name].$dirty; 
}; 

$scope.hasSuccess = function (form, name) { 
    return form[name].$valid; 
}; 
+0

Thx的解决方案,但是有可能改善ngShow中的代码?我的意思是外包在一个函数或指令或类似? – yuro

1

尝试此

<p class="help-block" ng-show="editForm[el.name].$error.required && editForm[el.name].$touched">Field is required.</p> 
<p class="help-block" ng-show="editForm[el.name].$error.pattern">Thats the pattern error message.</p> 
+0

是否有可能将函数中的代码外包到ngShow中?这种代码的最佳做法是什么? – yuro

+1

在angularjs中检出ngMessages https://docs.angularjs.org/api/ngMessages/directive/ngMessages – simon