FormControlオブジェクトのValidtors
を更新する方法はありますか?私はFormGroup
を持っています1つの入力は選択フィールドです。選択フィールドの値が変わったときFormGroup内の他のFormControlでバリデーターを変更します。角2:ValueChangesの後のFormControlバリデータを更新
<div class="row" [formGroup]="appsForm">
<div class="form-group col-xs-6">
<label>Platform</label>
<select id="licensePlatform" class="form-control"
formControlName="platform">
<option *ngFor="let platform of licensePlatforms" [value]="platform">
{{platform}}
</option>
</select>
<small [hidden]="appsForm.controls.platform.valid">
Platform is required
</small>
</div>
<div class="form-goup col-xs-6">
<label>App ID</label>
<input type="text" class="form-control" formControlName="appId">
<small [hidden]="appsForm.controls.appId.valid">
Please use the right ID format
</small>
</div>
</div>
私はappsForm.controls.appId.value
にはない、ここで示したようなsubscribeToFormChanges()
方法を実装しています:
private appIdRegexes = {
ios: /^[a-zA-Z][a-zA-Z0-9]*(\.[a-zA-Z0-9\-]+){2,}$/,
android: /^([a-zA-Z])[a-zA-Z0-9_]*(\.[a-zA-Z][a-zA-Z0-9\-]*){2,}$/,
any: /^any$/
};
private subscribeToFormChanges(): void {
const myFormValueChanges$ = this.appsForm.valueChanges;
myFormValueChanges$.subscribe(x => {
const platform = this.appsForm.controls['platform'].value;
const appId = this.appsForm.controls['appId'].value;
if (this.appIdRegexes[platform]) {
this.appsForm.controls['appId'] = new FormControl(appId, Validators.pattern(this.appIdRegexes[platform].source));
}
});
}
そして、ここでは、HTMLテンプレートです:ここで
は私のFormGroupコンポーネントから私のsubscribeToFormChanges()
方法であり、入力フィールドに書き込むときにもう更新されません。最初は値が更新されています。 FormGroup
内のコントロールを再確認するには
使用パッチの値({controlTobeUpdated:値})。 https://angular.io/docs/ts/latest/api/forms/index/FormGroup-class.html#!!patchValue-anchor – Manish
@ user32しかし、 'patchValue()'は値を更新するだけですバリデーター? –
patchValue()は値を更新することを許可しますが、その値が更新されるとバリデータが起動されます。 – Manish