2016-06-16 5 views
0

フィールドで検証を動的に変更するにはどうすればいいですか?私は5つのフィールドを持つコントロールグループを持っています。このため、このコントロールグループでカスタムバリデーターを使用して、入力が空でないかどうかを確認したいと思います。それらのいずれかが空の場合は、このコントロールグループ内のすべてのフィールドの検証を必須に設定する必要があります。コントロールが開始された後、コントロールの検証を変更する方法は?

これを行うには、いずれかの入力が空であるかどうかを確認した後で、必要な各コントロールの検証を動的に変更する必要があります。私は最初の部分を得ました - しかし、私はまだそれが開始された後、コントロールの検証を変更する方法を理解することはできません。何か案は?

this._formBuilder.group({....}, {validator: customValidator}) 

答えて

1

あなたは行動値

class MyComponent { 
    constructor(fb:FormBuilder) { 
    this.form = fb.group({ 
     c1: ['', (c) => this.myValidator(c)], 
     ... 
    }); 
    } 

    someState = true; 

    myValidator(c:Control) { 
    if(this.someState && control.value ....) { 
    } 
    } 
} 

に応じて変更するカスタムバリデータを使用することができます。私は、現時点ではやっている何を

は、私はこのようなグループにバリデータを入れていますこのように、バリデータは、例えば、現在のコンポーネントの状態にアクセスすることができる。バリデーターを別のクラスに移動し、そのクラスのメソッド参照をバリデーター・パラメーターに渡して、このクラスのプロパティーを更新してバリデーターの動作を変更することもできます。

class MyValidator { 
    someState = true; 

    validate(c:Control) { 
    if(this.someState && control.value ....) { 
    } 
    } 
} 

class MyComponent { 
    myValidator = new MyValidator(); 

    constructor(fb:FormBuilder) { 
    this.form = fb.group({ 
     c1: ['', this.myValidator.validate.bind(this.myValidator)], 
     ... 
    }); 
    } 

    onSomeEvent() { 
    this.myValidator.someState = !this.myValidator.someState; 
    this.form.control.c1.updateValueAndValidity(); 
    } 
} 
+0

これは基本的に私がやっていることですが、実行時にどのようにコントロールの検証を変更できるかを知りたいと思います。これは可能ですか? – uksz

+0

これはサポートされていません。コントロールを削除し、異なるバリデータが設定されている別のコントロールを追加することができます。 –

+0

答えの中のソリューションと比較してバリデータを追加/削除することで、どのような効果が期待できますか? –

関連する問題