条件付きでフォームフィールドを必要とする方法はありますか?カスタムバリデーターを作成しましたが、カスタムバリデーターに渡す条件変数は静的で、初期値のままです。更新された条件付き値を取得するために私のカスタムバリデータはどのように見えるべきですか?おそらく、カスタムバリデータの代わりにValidators.required
でこれを行う方法がありますか?Angular 2条件付きバリデータ.required?
private foo: boolean = false;
private bar: boolean = true;
constructor(private _fb: FormBuilder) {
function conditionalRequired(...conditions: boolean[]) {
return (control: Control): { [s: string]: boolean } => {
let required: boolean = true;
for (var i = 0; i < conditions.length; i++) {
if (conditions[i] === false) {
required = false;
}
}
if (required && !control.value) {
return { required: true }
}
}
}
this.applyForm = _fb.group({
'firstName': ['', Validators.compose([
conditionalRequired(this.foo, !this.bar)
])],
...
});
}
更新(2016年5月17日)
それは、これを掲示以来、長い時間がかかったが、私はそこに誰のためのControlGroup
クラスで利用可能.include()
と.exclude()
メソッドを参照したいのですが誰がこの機能を作成しようとしていますか。 (docs)おそらく上記のような条件付きバリデータの使用例がありますが、これを処理するためのコントロール、コントロールグループ、およびコントロール配列の包含と除外がわかりました。あなたが望むコントロールにrequired
バリデータを設定し、それを含めたり除外したりするだけです。これが誰かを助けることを願って!
は、私には;-) –
を正常に見える。しかし'foo'をfalseとして表示します。バリデーターに 'console.log(conditions)'を投げると、 'foo'が実際に真であることがわかったら' [false、false] 'を返します。私は '[true、false]'を得る必要があります。私はコンストラクタの内部にあるので、条件が一度設定されているため、これが仮定されています。この現象を回避する方法はありますか? –
更新プログラム内のドキュメントへのリンクが壊れています – surfbird0713