Użycie wtyczki TokenInput i użycie wbudowanego w AngularJS walidacji formController.
W tej chwili próbuję sprawdzić, czy pole zawiera tekst, a następnie ustawić pole na prawidłowe, jeśli tak. Problem z używaniem wtyczki polega na tym, że tworzy ona swoje własne dane wejściowe, a następnie ul + li do ustawiania.
Mam dostęp do addItem (formname) i moich możliwości w kontrolerze, wystarczy ustawić go na $ valid.
Narzut.
<form class="form-horizontal add-inventory-item" name="addItem">
<input id="capabilities" name="capabilities" token-input data-ng-model="inventoryCapabilitiesAutoComplete" data-on-add="addCapability()" data-on-delete="removeCapability()" required>
<div class="required" data-ng-show="addItem.capabilities.$error.required" title="Please enter capability."></div>
</form>
JS.
$scope.capabilityValidation = function (capability) {
if (capability.name !== "") {
addItem.capabilities.$valid = true;
addItem.capabilities.$error.required = false;
} else {
addItem.capabilities.$valid = false;
addItem.capabilities.$error.required = true;
}
};
Uruchamiam funkcję capacityValidation, gdy TokenInput ma coś wprowadzonego i przekazanego do obiektu.
EDYTOWAĆ:
Okazało się, że ng-model na moim wejściu robi rzeczy i otrzymuje wyniki autouzupełniania, dlatego nie mogę zmusić ng-valid do pracy, ponieważ jest oparty na modelu.
$scope.inventoryCapabilitiesAutoComplete = {
options: {
tokenLimit: null
},
source: urlHelper.getAutoComplete('capability')
};
Nie napisałem tej implementacji autouzupełniania, czy jest inny sposób, aby to zrobić, w którym miałbym dostęp do atr ng-model i przenieść funkcję modelu w inne miejsce?
źródło
<div ... data-ng-show="capabilities_error" ...>
Innymi słowy, czy istnieje powód, dla którego chcesz / musisz używać FormController?addItem.capabilities.$valid = true
i / lub ustawić addItem.capabilities. $ Error.required na true lub false?Odpowiedzi:
Nie możesz bezpośrednio zmienić ważności formularza. Jeśli wszystkie dane potomne są prawidłowe, formularz jest ważny, jeśli nie, to nie jest.
To, co powinieneś zrobić, to ustawić ważność elementu wejściowego. Jak tak;
addItem.capabilities.$setValidity("youAreFat", false);
Teraz dane wejściowe (a więc formularz) są nieprawidłowe. Możesz również sprawdzić, który błąd powoduje unieważnienie.
addItem.capabilities.errors.youAreFat == true;
źródło
capabilities
jest zmienną? Mam tablicę, która zawiera nazwy wejściowe i chcę zapętlić wewnątrz tablicy i ustawić je nieprawidłowo jeden po drugim: /name
atrybutu formularza i atrybutu danych wejściowychid
. Różni się to od wartości ustalonych przezngModel
$scope.addItem['myVariableName'].$setValidity("youAreFat", false);
$scope.addItem.capabilities.$setValidity("youAreFat", false);
Powyższe odpowiedzi nie pomogły mi w rozwiązaniu problemu. Po długich poszukiwaniach trafiłem na to częściowe rozwiązanie .
W końcu rozwiązałem mój problem z tym kodem, aby ręcznie ustawić pole wejściowe na ng-invalid (aby ustawić na ng-valid, ustaw je na `` true ''):
$scope.myForm.inputName.$setValidity('required', false);
źródło
$setValidity
siętrue
jako drugi parametr, gdy wejście jest ważny.Natknąłem się na ten post z podobnym problemem. Moja poprawka polegała na dodaniu ukrytego pola, aby zachować mój nieprawidłowy stan.
<input type="hidden" ng-model="vm.application.isValid" required="" />
W moim przypadku miałem zerowalny bool, który osoba musiała wybrać jeden z dwóch różnych przycisków. jeśli odpowiedzą tak, jednostka zostanie dodana do kolekcji i stan przycisku ulegnie zmianie. Do czasu uzyskania odpowiedzi na wszystkie pytania (jeden z przycisków w każdej z par ma kliknięcie) formularz jest nieważny.
vm.hasHighSchool = function (attended) { vm.application.hasHighSchool = attended; applicationSvc.addSchool(attended, 1, vm.application); }
<input type="hidden" ng-model="vm.application.hasHighSchool" required="" /> <div class="row"> <div class="col-lg-3"><label>Did You Attend High School?</label><label class="required" ng-hide="vm.application.hasHighSchool != undefined">*</label></div> <div class="col-lg-2"> <button value="Yes" title="Yes" ng-click="vm.hasHighSchool(true)" class="btn btn-default" ng-class="{'btn-success': vm.application.hasHighSchool == true}">Yes</button> <button value="No" title="No" ng-click="vm.hasHighSchool(false)" class="btn btn-default" ng-class="{'btn-success': vm.application.hasHighSchool == false}">No</button> </div> </div>
źródło
To bardzo proste. Na przykład: w kontrolerze JS użyj tego:
$scope.inputngmodel.$valid = false;
lub
$scope.inputngmodel.$invalid = true;
lub
$scope.formname.inputngmodel.$valid = false;
lub
$scope.formname.inputngmodel.$invalid = true;
Wszystko działa dla mnie na różne wymagania. Uderz, jeśli to rozwiąże twój problem.
źródło