2016-09-26 8 views
6

チェックボックスがオンになっているかどうかを検証するカスタム検証ルールを実装しようとしています。角2 - 例外:_this.subscribeは関数ではありません - カスタム検証

しかし、私は、カスタムバリデータに

validator.ts

 

    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

はあなたが解決策を見つけますか? – John

答えて

3

を追加しようとしたとき、私はあなたの周りに変更した場合だと思いますerror_handler.js:46 EXCEPTION: _this.subscribe is not a functionを取得していますあなたのFormGroupコンストラクタをnew FormControl()に渡し、バリデータを配列に追加すると、うまくいくかもしれません。

何かのように:

export class Wizard { 
    myForm: FormGroup; 

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

私はCUSTOM VALIDATORS IN ANGULAR 2にこの記事を読み取ることをお勧めします。

よろしくお願いいたします。

7

複数のバリデーターが必要な場合はValidators.composeを使用してください。だからあなたのコードは次のようにする必要があります:あなたはバリhereについての素晴らしい記事を読むことができ

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

2

この問題は、検証で[]が見つからないためにのみ発生します。

正しい形式は次のとおりです。

'privacy': ['', [Validators.compose([Validators.required, CustomValidators.validateChecked])]], 
関連する問題