컨트롤러 내부의 AngularJS 응용 프로그램에 다음 코드가 있습니다.이 코드는 이름이있는 양식에 속하는 ng-submit 함수에서 호출됩니다 profileForm
.
$scope.updateProfile = function() {
if($scope.profileForm.$invalid) {
//error handling..
}
//etc.
};
이 함수 내에서 어떤 필드가 전체 양식을 유효하지 않게 호출하는지 알아내는 방법이 있습니까?
답변
각 입력 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);
이것은 형식의 유효하지 않은 필드 배열을 출력합니다.
답변
어떤 필드가 유효성 검사를 엉망으로 만들고 있는지 확인하고 도움을 줄 jQuery가 있다면 자바 스크립트 콘솔 에서 “ng-invalid” 클래스를 검색하면됩니다.
$('.ng-invalid');
어떤 이유로 든 유효성 검사에 실패한 모든 DOM 요소를 나열합니다.
답변
당신은 루프를 통해를 할 수 있습니다 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": {}
형식이 잘 지정되어 있지는 않지만 여기에서 이러한 것들을 볼 수 있습니다.