【问题标题】:How to reduce the form validation fields in AngularJS如何减少AngularJS中的表单验证字段
【发布时间】:2015-06-14 18:22:11
【问题描述】:

我有一个包含 3 个输入字段的表单。但我也想将该表单用于其他页面。因此我减少了表格。一开始我已经将视图定义如下:

查看:

<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;
}

这仅适用于输入字段 Firstname。但是如何为所有字段(名字、姓氏、年龄)动态定义呢?

【问题讨论】:

    标签: javascript angularjs forms validation


    【解决方案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;
    };
    

    【讨论】:

    • 感谢您的解决方案,但是否可以改进 ngShow 中的代码?我的意思是外包一个函数或指令或类似的东西??
    【解决方案2】:

    试试这个

     <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>
    

    【讨论】:

    猜你喜欢
    • 2014-02-22
    • 2023-03-15
    • 2016-10-31
    • 1970-01-01
    • 2016-05-27
    • 2013-10-07
    • 2020-04-11
    • 2019-03-05
    • 1970-01-01
    相关资源
    最近更新 更多