如何在我的代码中将Angular 2控件标记为脏?
当我这样做的时候:
control.dirty = true;
我收到此错误:
Cannot set property dirty of #<AbstractControl> which has only a getter
答案 0 :(得分:37)
答案 1 :(得分:1)
您可以编写一个自定义函数,将FormGroup
中的所有控件标记为触摸/脏,如下所示:
markFormGroupTouched(formGroup: FormGroup) {
(<any>Object).values(formGroup.controls).forEach(control => {
control.markAsDirty(); // or control.markAsTouched();
});
}
答案 2 :(得分:1)
假设您从模板中调用方法为:
<form #loginForm = "ngForm" (ngSubmit)="login(loginForm)"> ... </form>
在您的login.component.ts中,使用以下内容
login(loginForm : any) {
//make sure that inputs are valid
if (loginForm.invalid) {
Object.keys( loginForm.controls).forEach(key => {
loginForm.controls[key].markAsDirty();
});
return;
}
}
答案 3 :(得分:0)
对于模板驱动表单,我们可以使用以下通用代码
public onSubmitForm(cardFormObject: NgForm) {
if (!cardFormObject.valid)
this.markAsDerty(cardFormObject);
}
private markAsDerty(cardFormObject: NgForm) {
for (var eachControl in cardFormObject.controls) {
(<FormControl>cardFormObject.controls[eachControl]).markAsDirty();
}
}