[javascript] AngularJS : 컨트롤러에서 입력을 $ valid로 수동으로 설정하는 방법은 무엇입니까?
은 Using TokenInput의 플러그인 및 내장 FormController에 확인 AngularJS와를 사용하여.
지금은 필드에 텍스트가 포함되어 있는지 확인하고있는 경우 필드를 유효한 것으로 설정하려고합니다. 플러그인 사용의 문제는 자체 입력을 생성 한 다음 stlying을위한 ul + li를 생성한다는 것입니다.
컨트롤러에서 addItem (formname) 및 내 기능에 액세스 할 수 있습니다. $ valid로 설정하기 만하면됩니다.
마크 업.
<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;
}
};
TokenInput에 무언가가 입력되어 개체에 전달되면 capabilityValidation 함수를 실행하고 있습니다.
편집하다:
내 입력에 대한 ng-model이 작업을 수행하고 자동 완성 결과를 얻습니다. 그래서 모델을 기반으로하므로 ng-valid를 사용할 수 없습니다.
$scope.inventoryCapabilitiesAutoComplete = {
options: {
tokenLimit: null
},
source: urlHelper.getAutoComplete('capability')
};
이 자동 완성 구현을 작성하지 않았습니다. ng-model 속성에 액세스하고 모델 함수를 다른 곳으로 옮길 수있는 또 다른 방법이 있습니까?
답변
양식의 유효성을 직접 변경할 수 없습니다. 모든 하위 입력이 유효하면 양식이 유효하고 유효하지 않으면 유효하지 않습니다.
해야 할 일은 입력 요소의 유효성을 설정하는 것입니다. 그렇게;
addItem.capabilities.$setValidity("youAreFat", false);
이제 입력 (및 양식)이 유효하지 않습니다. 또한 어떤 오류가 무효화를 일으키는지도 확인할 수 있습니다.
addItem.capabilities.errors.youAreFat == true;
답변
위의 답변은 내 문제를 해결하는 데 도움이되지 않았습니다. 긴 검색 끝에 나는이 부분적인 해결책에 부딪혔다 .
마침내 입력 필드를 ng-invalid로 수동으로 설정하는이 코드로 문제를 해결했습니다 (ng-valid로 설정하려면 ‘true’로 설정).
$scope.myForm.inputName.$setValidity('required', false);
답변
비슷한 문제가있는이 게시물을 보았습니다. 내 수정 사항은 잘못된 상태를 유지하기 위해 숨겨진 필드를 추가하는 것이 었습니다.
<input type="hidden" ng-model="vm.application.isValid" required="" />
제 경우에는 사람이 두 개의 다른 버튼 중 하나를 선택해야하는 nullable bool이있었습니다. 예라고 답하면 엔티티가 컬렉션에 추가되고 버튼 상태가 변경됩니다. 모든 질문에 답할 때까지 (각 쌍의 버튼 중 하나를 클릭 할 때까지) 양식이 유효하지 않습니다.
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>
답변
매우 간단합니다. 예를 들어 : JS 컨트롤러에서 다음을 사용하십시오.
$scope.inputngmodel.$valid = false;
또는
$scope.inputngmodel.$invalid = true;
또는
$scope.formname.inputngmodel.$valid = false;
또는
$scope.formname.inputngmodel.$invalid = true;
모두 다른 요구 사항에 대해 나를 위해 작동합니다. 이것이 문제를 해결하면 누르십시오.