2016-10-14 14 views
5

私は非常に単純なフォームコントロールのバリデータを書いた:Angular2パラメータをカスタムフォームコントロールバリデータに渡す方法は?

import { Directive } from '@angular/core'; 
import { AbstractControl, NG_VALIDATORS } from '@angular/forms'; 

function checkboxRequiredValidator(c: AbstractControl) { 
    return c.value ? null : { 
     required: true 
    }; 
} 



@Directive({ 
    selector: '[checkbox-required-validator]', 
    providers: [ 
     { provide: NG_VALIDATORS, multi: true, useValue: checkboxRequiredValidator } 
    ] 
}) 
export class CheckboxRequiredValidator { 

} 

私が返すことができるそれにメッセージパラメータを渡したいと思います。私はこれを試してみましたが、それは動作しません。

function checkboxRequiredValidator(c: AbstractControl, msg) { 
    return c.value ? null : { 
     message: msg 
    }; 
} 


@Directive({ 
    selector: '[checkbox-required-validator]', 
    providers: [ 
     { provide: NG_VALIDATORS, multi: true, useValue: checkboxRequiredValidator } 
    ] 
}) 
export class CheckboxRequiredValidator { 
    @Input('checkbox-required-validator') msg: = 'default message'; 

} 

すべてのヘルプは、あなたが指示自体バリ作ることができます

答えて

3

をいただければ幸いです。そうすれば、メッセージ入力を使用することができます。

import { forwardRef } from '@angular/core'; 
import { Validator } from '@angular/forms'; 

@Directive({ 
    selector: '[checkbox-required-validator]', 
    providers: [ 
    { 
     provide: NG_VALIDATORS, 
     multi: true, 
     useExisting: forwardRef(() => CheckboxRequiredValidator) 
    } 
    ] 
}) 
export class CheckboxRequiredValidator implements Validator { 
    @Input('checkbox-required-validator') msg = 'default message'; 

    validate(c: AbstractControl) { 
    return c.value ? null : { 
     required: this.msg 
    }; 
    } 
} 
+0

を({ {モードl.property}}) –

+0

@GlennBullockどのようにモデルデータを渡すことができますか?私がこれをするとき、私はいつもエラーを縛ることができません。 –

+0

説明していただけますか?私は同じ地点に止まっています – desperado06

3

あなたの既存の機能を変更し、閉鎖にagrumentを追加することができ、あなたもそう(例えばMAXVAL関数を記述)のような独自のカスタムバリデータクラスに追加することができます。

export class MyValidators 
{ 
     public static maxVal(maxVal: number) { 
     return (c: FormControl) => { 
      return c.value > maxVal ? 
       { 'maxVal': { 'MaxValue': maxVal, 'actualValue': c.value } } : 
       null;   
     } 
    } 
その後、

とあなたのFormControlでそれを使用し、バリデータ関数に引数(例えば、100)を送信します。これはまた、あなたがいる限り、あなたがそれを補間として渡したいモデルデータで動作します

let fc:FormControl = new FormControl('name', MyValidators.maxVal(100)); 
関連する問題