답변:
각 입력 name
의 유효성 검사 정보는 form
의 이름에 속성으로 노출됩니다 scope
.
HTML
<form name="someForm" action="/">
<input name="username" required />
<input name="password" type="password" required />
</form>
JS
$scope.someForm.username.$valid
// > false
$scope.someForm.password.$error
// > { required: true }
노출 된 속성은 $pristine
, $dirty
, $valid
, $invalid
, $error
.
어떤 이유로 오류를 반복하려는 경우 :
$scope.someForm.$error
// > { required: [{$name: "username", $error: true /*...*/},
// {$name: "password", /*..*/}] }
오류가있는 각 규칙은 $ error에 노출됩니다.
다음은 http://plnkr.co/edit/zCircDauLfeMcMUSnYaO?p=preview 로 플레이 할 플 런커입니다 .
유효하지 않은 양식 필드 확인
console.log($scope.FORM_NAME.$error.required);
이것은 형식의 유효하지 않은 필드 배열을 출력합니다.
당신은 루프를 통해를 할 수 있습니다 form.$error.pattern
.
$scope.updateProfile = function() {
var error = $scope.profileForm.$error;
angular.forEach(error.pattern, function(field){
if(field.$invalid){
var fieldName = field.$name;
....
}
});
}
유효하지 않은 필드가있는 경우 해당 값을 얻으려고하면 undefined
.
$scope.mynum
숫자를 입력 할 때만 유효한 텍스트 입력이 첨부되어 있고 여기에 입력했다고 가정 해 보겠습니다 ABC
.
당신의 가치를하려고하면 $scope.mynum
, 그것은 것입니다 undefined
; 반환하지 않습니다 ABC
.
(아마이 모든 것을 알고 있지만 어쨌든)
따라서 범위에 추가 한 유효성 검사가 필요한 모든 요소가있는 배열을 사용하고 필터 (예 : underscore.js 포함)를 사용하여 typeof
undefined
.
그리고 그것들은 잘못된 상태를 일으키는 필드가 될 것입니다.
비활성화 된 저장 버튼 툴팁에 모든 오류를 표시하고 싶었으므로 사용자는 긴 양식을 위아래로 스크롤하는 대신 비활성화 된 이유를 알 수 있습니다.
if (frm) {
disable = frm.$invalid;
if (frm.$invalid && frm.$error && frm.$error.required) {
frm.$error.required.forEach(function (error) {
disableArray.push(error.$name + ' is required');
});
}
}
if (disableArray.length > 0) {
vm.disableMessage = disableArray.toString();
}
내 응용 프로그램의 경우 다음과 같은 오류가 표시됩니다.
<ul ng-repeat="errs in myForm.$error">
<li ng-repeat="err in errs">{{err.$name}}</li></ul>
모든 것을보고 싶다면 다음과 같이 표시되는 사용자 'err'만 있으면됩니다.
"$validators": {},
"$asyncValidators": {},
"$parsers": [],
"$formatters": [],
"$viewChangeListeners": [],
"$untouched": true,
"$touched": false,
"$pristine": true,
"$dirty": false,
"$valid": false,
"$invalid": true,
"$error": { "required": true },
"$name": "errorfieldName",
"$options": {}
형식이 잘 지정되어 있지는 않지만 여기에서 이러한 것들을 볼 수 있습니다.
name
$ name (물론)에서 보려면 입력 속성을 지정해야합니다 . AngularJS가 이름없이 모델 속성에 바인딩된다는 사실은 어떤 입력이 유효하지 않은지 진단하기 어려울 수 있습니다.