FormBuilder
でフォームを作成しています。Validator
をformGroup
に追加します。私は条件付きで一定の条件上のアドレスのformControlsの一部にバリデータを追加したいAngular2:FormGroupのカスタムバリデータを作成する方法は?
this.myForm = fb.group({
'name': ['', [Validators.maxLength(50), Validators.required]],
'surname': ['', [Validators.maxLength(50), Validators.required]],
'address': fb.group({
'street': ['', Validators.maxLength(300)],
'place': [''],
'postalcode': ['']
}),
'phone': ['', [Validators.maxLength(25), phoneValidator]],
'email': ['', emailValidator]
});
: はここに私のコードです。
だから私は、次のようにvalidator
を追加しました:
'address': fb.group({
'street': ['', Validators.maxLength(300)],
'place': [''],
'postalcode': ['']
}), { validator: fullAddressValidator })
を、私はアドレスFormGroup
のためのバリデータを作成するために始めた:私は、以下の条件を追加する必要が
export const fullAddressValidator = (control:FormGroup) => {
var street:FormControl = control.controls.street;
var place:FormControl = control.controls.place;
var postalcode:FormControl = control.controls.postalcode;
if (my conditions are ok) {
return null;
} else {
return { valid: false };
}
};
を:
- すべてのフィールドが空白の場合、フォームは有効です
- フィールドの一つが記入されている場合
postalcode
が記入されている場合は、国(代わりに都市の)postalcode
はオプションでのインスタンス - その後
zipValidator
がある必要がありますされ place
場合、すべてのフィールドが必要とされなければなりません
だからそのformControl
に追加し、一定の条件にFormGroup
にAngular2 Validators
を追加することが可能でしょうか? もしそうなら、条件をどのように実装するのですか?他のバリデータのソースコードにsetValidators()
とupdateValueAndValidity()
を使用できますか?
私はパラメータとして渡す必要がありますか? – smartmouse
条件です。条件は、値、コンポーネントのメソッド、クラスインスタンスまたは関数です。バリデータの内側のスコープにアクセスできる追加のチェックを行うには、バリデータ内で使用できます。メソッドを渡すと、メソッドは検証チェック時にコンポーネントの状態にアクセスできます。メソッドや関数を渡すときは、必ず '()=>'の矢印関数の構文を使用してください。 –
私は現在、カスタムバリデーターに 'FormGroup'を全部持っていますので、すべての条件を' FormControl'sで確認できます。私が間違っている? – smartmouse