1

我有一组数据字段。它们看起来像这样:

// Read-Only
<div class="field-group" ng-if="feature.edit == false">
    <div class="label" ng-class="{'feature-required': field.Validations.Required === true}">{{field.Label}}</div>
    <div class="value">{{field.Value}}</div>
</div>


// Editor
<div class="field-group" ng-show="feature.edit == true">
    <label for="F{{field.FieldID}}">
        <span ng-class="{'feature-required': field.Validations.Required === true, 'feature-notrequired': field.Validations.Required === false}">{{field.Label}}</span>

        <input type="text"
               id="F{{field.FieldID}}"
               name="F{{field.FieldID}}"
               ng-change="onFieldUpdate()"
               ng-model="field.Value"
               jd-field-attributes attr-field="field"
               jd-validate on-error="onFieldError"
               field="field">
    </label>

</div>

feature.edit 由按钮控制,您可以将数据设为只读或可编辑。每个字段都有一些验证,通常,如果需要,它必须不同于 null。我想在单击编辑并显示输入字段后触发该验证。一种方法是遍历所有输入字段并使用 jQuery trigger("change")。我必须做一些延迟(它需要 Angular 来填充所有字段)。在输入变得可见之后,有什么方法可以触发ng-change或运行onFieldUpdate() ?我试过ng-init,但没有用。

4

1 回答 1

0

您可以将验证逻辑移动到 ngModel$validators管道中的自定义验证器。您添加到此管道的函数将在每次更改时根据输入模型值进行评估,并自动将关联的有效/无效类添加到输入。

以下是如何添加自定义验证器的示例:

app.directive('moreValidation', function() {
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, element, attributes, ngModel) {
      ngModel.$validators.first = function(input) {
        return true; // add your custom logic here
      }

      ngModel.$validators.second = function(input) {
        return true;
      }

      ngModel.$validators.third = function(input) {
        return true; 
      }
    }
  };
});

// markup
<input type="text" ng-model="modelObject" more-validation />

这是一个小的工作 plnkr 示例:http ://plnkr.co/edit/mKKuhNqcnGXQ4sMePrym?p=preview

于 2016-01-28T19:46:09.577 回答