2017-10-05 4 views
1

the Reactive Forms documentationによると、私は、データモデルからフォームグループを作成した場合、どのように私はバリデータを追加するデータモデルからFormBuilderグループを作成するときにバリデータを追加するにはどうすればよいですか?

this.heroForm = this.fb.group({ 
    name: ['', Validators.required ], 
    address: this.fb.group({ 
    street: '', 
    city: '', 
    state: '', 
    zip: '' 
    }) 
}); 

から

export class Address { 
    street = ''; 
    city = ''; 
    state = ''; 
    zip = ''; 
} 

this.heroForm = this.fb.group({ 
    name: ['', Validators.required ], 
    address: this.fb.group(new Address()) 
}); 

に私のFormGroup定義をリファクタリングすることができますか?

+0

を私はあなたがセッターに正規表現でオブザーバーパターンのミックスマッチを使用することができると思います。 モデルの設定者の妥当性を確認する –

答えて

0

the FormBuilder sourceによると、groupには、バリデータを定義できる2番目のextraパラメータがあります。次示唆Todd Motto has an article on how to use it:これはフォーム・グループを検証することができます

export class Address { 
    street = ''; 
    city = ''; 
    state = ''; 
    zip = ''; 
} 

this.heroForm = this.fb.group({ 
    name: ['', Validators.required ], 
    address: this.fb.group(new Address(), { validator: this.myValidator }) 
}); 

this.myValidator = (control: AbstractControl): {[key: string]: boolean} => { 
    const city= control.get('city'); 
    const state= control.get('state'); 
    ... 
    if (allTheControlsAreValid) return null; 
    else return { myCustomError: foo}; 
}; 

ではなく、コントロール。あなたは個々のコントロールにバリデータを設定したい場合はformGroupが作成された後、あなたがプログラム的にそれらを設定することができます。

this.heroForm.get('address').get('city').setValidators([Validators.required, Validators.maxLength(30)]); 
関連する問題