私はユーザがLocal
とForeigner
の2つの値を選択できる単純なフォームを作成しています。ユーザーが何も選択しない場合、フォームの値はinvalid
になります。ユーザーがLocal
を選択すると、フォームはvalid
になります。ユーザがForeigner
を選択した場合は、ユーザからの入力として国が必要な新しいフィールドが表示されます。ユーザーが国入力フィールドに何も入力しないと、これはフォームinvalid
になります。私は以下のようにフォームを作成しようとしたAngular2 - 条件付きで作成された入力フィールドのフォーム検証
:
import {Component} from 'angular2/core';
import {bootstrap} from 'angular2/platform/browser';
import {Control,ControlGroup,FormBuilder,FORM_DIRECTIVES,Validators} from 'angular2/common';
@Component({
selector: 'app',
template: `
<form [ngFormModel]="form" >
<select [ngFormControl]="nationalityCtrl" >
<option *ngFor="#nationality of nationalities" [value]="nationality" >{{nationality}}</option>
</select><br>
<input *ngIf="form.value.nationality == 'Foreigner'" type="text" [ngFormControl]="countryCtrl" placeholder="Country Name" />
<button class="btn btn-primary" [disabled]="!form.valid" >Submit</button>
</form>
`,
directives: [FORM_DIRECTIVES]
})
class MainApp{
public nationalities = ["Foreigner","Local"];
public form:ControlGroup;
public nationalityCtrl:Control;
public countryCtrl:Control;
constructor(private _fb:FormBuilder){
var self = this;
this.nationalityCtrl = new Control("",Validators.compose([Validators.required]));
this.countryCtrl = new Control("",Validators.compose([function(control:Control){
if(self.nationalityCtrl.value == "Foreigner" && !control.value){
return {invalid: true};
}
}]));
this.form = this._fb.group({
nationality: this.nationalityCtrl,
country: this.countryCtrl
});
}
}
bootstrap(MainApp);
しかし、すぐに私はコンソールに次のエラーを取得するForeigner
オプションを選択して:
例外:式「形式を!。 MainApp @ 6:36 'で有効です。 がチェックされた後に変更されました。以前の値: 'false'。現在値:plunker hereに私は再生産の問題は、コンソールにエラーメッセージを見ることができます
: の「本当」[!36 @ 6 MainAppにしてform.valid]。
ませんplunkerが正常に動作します。 – essaji