Угловой UI-Validate без поля ввода (выражение проверки)

Я использую утилиты ui-validate https://github.com/angular-ui/ui-validate

Проблема заключается в проверке выражения на форме без поля ввода. Например? У меня есть объект

$scope.item = { field1 : 0, field2: 0, field3: 0 };

Я хотел бы получить ошибку, при условии выражения: field1 + field2 + field3 == 0

Это общая проверка для всей формы. Не для некоторого ввода.

2 ответа

Вы можете написать небольшую функцию, как это (не совсем уверен, вам нужно использовать ui-validate за это):

$scope.validate = function () {
    var sum = 0;

    // Sum every non Angular key
    angular.forEach($scope.items, function (value, key) {
        // You can also add another check below "angular.isNumber(value)" if you have some text fields
        if (key.charAt(0) !== '$') {
            // Call "parseInt()" method here if values are in string
            sum += value;
        }
    });

    return sum !== 0;
}

Теперь покажите это где-нибудь в вашей форме:

<form>
    <div ng-show="!validate()">There is some error. Sum can't be zero</div>
    <!-- Your fields below -->
</form>

ui-validate может использоваться только внутри входных тегов, поскольку существует требование для ng-модели. ng-show привязка к функции будет работать. Вот пример: http://codepen.io/ctwoodwa/pen/eJmyYg

angular.module('ngExample', ['ngMessages'])
  .controller('elemController', Controller1);

function Controller1() {
  vm = this;  
  vm.item = { field1 : 0, field2: 0, field3: 0 };
  vm.validate = validate
    
    function validate() {
      // Determine if the form is valid.
      return (vm.item.field1 + vm.item.field2 + vm.item.field3 == 0);
    };
}
<div ng-app='ngExample' ng-controller="elemController as vm">
  <form name="exampleForm">
    <label for="field1">Field1</label>
   <input type="number" name="field1" ng-model="vm.item.field1"/>
    <label for="field2">Field 2</label>
    <input type="number" name="field2" ng-model="vm.item.field2"/>
    <label for="field3">Field 3</label>
    <input type="number" name="field3" ng-model="vm.item.field3"/>
    <div ng-show="vm.validate()">
  <div class="error">This form is not valid</div>
</div>
    <button>Submit</button>
    </form>
</div>

Другие вопросы по тегам