ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 03 폼 유효성검사 02
    앵귤러/04 폼(Forms) 2017. 9. 24. 17:41

    반응형 폼 유효성검사

    반응형 폼에서, 진실의 근원은 컴포넌트 클래스입니다. 템플릿의 어트리뷰트를 통해 유효성검사를 추가하는 대신 유효성검사 함수를 컴포넌트 클래스의 폼 컨트롤 모델에 직접 추가합니다. 그런 다음 Angular는 컨트롤의 값이 변경될 때마다 이 함수를 호출합니다.

     

    유효성검사 함수

    유효성검사 함수는 동기 유효성검사기와 비동기 유효성검사기 두 가지 유형이 있습니다.

    l  동기 유효성검사기: 컨트롤 인스턴스를 사용하고 즉시 유효성검사 오류집합 또는 null 중 하나를 리턴하는 함수. FormControl을 인스턴스화할 때 두 번째 인수로 이를 전달할 수 있습니다.

    l  비동기 유효성 검사기: 컨트롤 인스턴스를 사용하고 나중에 유효성검사 오류 또는 null 집합을 던지는 Promise 또는 Observable을 리턴하는 함수입니다. FormControl을 인스턴스화할 때 세 번째 인수로 이를 전달할 수 있습니다.

    참고 : 성능상의 이유로 Angular는 모든 동기 유효성검사기가 통과하면 비동기 유효성검사기를 실행합니다. 오류가 설정되기 전에 각각 완료되어야 합니다.

     

    내장 유효성검사기

    자체 유효성검사 함수를 작성하거나 Angular에 내장 유효성검사기를 사용할 수 있습니다.

    required minlength와 같은 템플릿기반 폼의 어트리뷰트로 사용할 수 있는 동일한 내장 유효성검사기를 모두 Validators 클래스의 함수로 사용할 수 있습니다. 내장 유효성검사기의 전체 목록을 보려면 Validators API 참조를 참조하십시오.

    영웅 폼을 반응형 폼으로 수정하려면 동일한 내장 유효성검사기를 함수 형식으로 사용할 수 있습니다. 아래를 참조하십시오:

    reactive/hero-form-reactive.component.ts (validator functions)

    ngOnInit(): void {

      this.heroForm = new FormGroup({

        'name': new FormControl(this.hero.name, [

          Validators.required,

          Validators.minLength(4),

          forbiddenNameValidator(/bob/i) // <-- Here's how you pass in the custom validator.

        ]),

        'alterEgo': new FormControl(this.hero.alterEgo),

        'power': new FormControl(this.hero.power, Validators.required)

      });

    }

     

    get name() { return this.heroForm.get('name'); }

     

    get power() { return this.heroForm.get('power'); }

    참고 사항 :

     

    l  name 컨트롤은 Validators.required Validators.minLength(4)라는 두 가지 내장 유효성검사기와 하나의 사용자정의 유효성검사기 forbiddenNameValidator를 설정합니다. 자세한 내용은 이 가이드의 사용자정의 유효성검사기 섹션을 참조하십시오.

    l  이 유효성검사기는 모두 동기 유효성검사기이므로 두 번째 인수로 전달합니다.

    l  함수를 배열로 전달하여 여러 유효성검사기를 지원합니다.

    l  이 예제는 몇 가지 getter 메서드를 추가합니다. 반응형 폼에서는 항상 부모그룹의 get메소드를 통해 모든 폼 컨트롤에 액세스할 수 있지만 때로는 getter를 템플릿의 축약으로 정의하는 것이 유용합니다.

    name 입력을 위한 템플릿을 다시 보면 템플릿기반 예제와 매우 유사합니다.

    reactive/hero-form-reactive.component.html (name with error msg)

    <input id="name" class="form-control"

           formControlName="name" required >

     

    <div *ngIf="name.invalid && (name.dirty || name.touched)"

         class="alert alert-danger">

     

      <div *ngIf="name.errors.required">

        Name is required.

      </div>

      <div *ngIf="name.errors.minlength">

        Name must be at least 4 characters long.

      </div>

      <div *ngIf="name.errors.forbiddenName">

        Name cannot be Bob.

      </div>

    </div>

    주요 테이크 아웃 :

    l  이 폼은 더 이상 디렉티브를 내보내지 않고 대신 컴포넌트 클래스에 정의된 name getter를 사용합니다.

    l  required 어트리뷰트는 계속 존재합니다. 유효성검사의 목적으로는 필요하지 않지만 CSS 스타일 또는 접근성의 이유로 템플릿에 보관할 수 있습니다.

    '앵귤러 > 04 폼(Forms)' 카테고리의 다른 글

    03 폼 유효성검사 04  (0) 2017.09.24
    03 폼 유효성검사 03  (0) 2017.09.24
    03 폼 유효성검사 01  (0) 2017.09.24
    02 템플릿기반 폼(Template-driven Forms) 06  (0) 2017.09.03
    02 템플릿기반 폼(Template-driven Forms) 05  (0) 2017.09.03

    댓글

Designed by Tistory.