Powiedzmy mam następujący (bardzo prosty) strukturę danych:kątowe: Weryfikacja wiele pól zależnych
$scope.accounts = [{
percent: 30,
name: "Checking"},
{ percent: 70,
name: "Savings"}];
Potem mają następującą strukturę jako część postaci:
<div ng-repeat="account in accounts">
<input type="number" max="100" min="0" ng-model="account.percent" />
<input type="text" ng-model="account.name" />
</div>
Teraz Chcę potwierdzić, że suma procentowa wynosi 100 dla każdego zestawu kont, ale większość przykładów, które widziałem w przypadku dyrektyw niestandardowych, dotyczy wyłącznie sprawdzania wartości indywidualnej. Jaki jest idiomatyczny sposób tworzenia dyrektywy, która może sprawdzać wiele zależnych pól jednocześnie? Istnieje wiele rozwiązań do tego w jquery, ale nie byłem w stanie znaleźć dobrego źródła dla Angular.
EDYCJA: Mam do czynienia z następującą dyrektywą niestandardową ("udział" to synonim "procentu" oryginalnego kodu). Dyrektywa zatwierdzania udziału przyjmuje jako wartość mapę o numerze "{group: accounts, id: $index}"
.
app.directive('shareValidate', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, elem, attr, ctrl) {
ctrl.$parsers.unshift(function(viewValue) {
params = angular.copy(scope.$eval(attr.shareValidate));
params.group.splice(params.id, 1);
var sum = +viewValue;
angular.forEach(params.group, function(entity, index) {
sum += +(entity.share);
});
ctrl.$setValidity('share', sum === 100);
return viewValue;
});
}
};
});
to prawie działa, ale nie może obsłużyć przypadek, w którym pole jest unieważniony, ale późniejsza zmiana w innej dziedzinie sprawia, że kolejny ważny. Na przykład:
Field 1: 61
Field 2: 52
Jeśli wezmę Pole 2 do 39, Pole 2 będzie teraz ważne, ale Pole 1 jest nadal nieprawidłowa. Pomysły?
Przyjemnie działające rozwiązanie, ale powiedziałbym, że można go ulepszyć, aby było bardziej ogólne. Nie uważam, że dobrą praktyką jest kodowanie ścieżek zakresu wewnątrz dyrektywy. Zrobiłem coś bardziej ogólnego (może ci to pomoże w przyszłości): http://liviutrifoi.wordpress.com/2013/10/19/angular-custom-validation-with-business-rules/ –
Witam, czy możesz podzielić się działające skrzypce dla powyższego przykładu, Dzięki – Vamsikrishna