2016-09-26 12 views
6

Bir onay kutusunun işaretli olup olmadığını doğrulamak için özel bir doğrulama kuralı uygulamaya çalışıyorum.Angular 2 - EXCEPTION: _this.subscribe bir işlev değil - Özel doğrulama

Ama özel doğrulama

validator.ts

eklemeye çalıştığımda error_handler.js:46 EXCEPTION: _this.subscribe is not a function alıyorum
 

    import { Control } from "angular/common"; 

    interface ValidationResult { 
     [key:string]:any; 
    } 

    export class CustomValidators { 

     static validateChecked(c: Control): ValidationResult { 
     return (c.value); 
     } 
    } 

Component.ts

 

    import {Component} from '@angular/core'; 

    import { 
     FormBuilder, 
     FormGroup, 
     Validators, FormControl, 
    } from '@angular/forms'; 
    import { CustomValidators } from './validators.ts' 

    @Component({ 
     selector: 'wizard', 
     templateUrl: './template.html', 
    }) 

    /** 
    * @todo - check how first select is automatically active 
    * @todo - export form presets to form class 
    */ 
    export class Wizard { 
     myForm: FormGroup; 

     privacy: boolean; 


     // Prefilling the FormBuilder 
     constructor(private horizonService: HorizonService, fb: FormBuilder) { 
     this.myForm = fb.group({ 
      'privacy': ['', Validators.required, CustomValidators.validateChecked], 
     }); 
     } 

     onSubmit(values: string): void { 
     console.log('you submitted value: ', values); 
     } 
    } 

+0

bir çözüm buldunuz mu? – John

cevap

3

Bence etrafında değiştirirseniz FormGroup yapıcınızın bir bitini, bir new FormControl()'u geçirerek ve bir diziye Doğrulayıcıları ekleyerek iyi çalışabilir.

şey gibi:

export class Wizard { 
    myForm: FormGroup; 

    constructor(private horizonService: HorizonService) { 
     this.myForm = new FormGroup({ 
      privacy: new FormControl('', [ 
       Validators.required, 
       CustomValidators.validateChecked 
      ]) 
     }); 
    } 
} 

Ben CUSTOM VALIDATORS IN ANGULAR 2 üzerine bu yazı okumak götürmenizi öneririz.

Saygılarımızla.

7

Birden fazla doğrulayıcıya ihtiyacınız varsa Validators.compose'u kullanmalısınız. Yani kod aşağıdaki gibi olmalıdır: Sen doğrulayıcıları here ilgili güzel bir yazı okuyabilir

constructor(private horizonService: HorizonService, fb: FormBuilder) { 
    this.myForm = fb.group({ 
     'privacy': ['', Validators.compose([Validators.required, CustomValidators.validateChecked])], 
    }); 
    } 

.

2

Sorun, yalnızca doğrulamada [] eksik olduğu için.

doğru biçimidir:

'privacy': ['', [Validators.compose([Validators.required, CustomValidators.validateChecked])]],