Угловой 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>