如何以编程方式将Angular 2表单控件设置为脏?

时间:2016-06-15 19:23:29

标签: javascript angular

如何在我的代码中将Angular 2控件标记为脏?

当我这样做的时候:

control.dirty = true;

我收到此错误:

Cannot set property dirty of #<AbstractControl> which has only a getter

4 个答案:

答案 0 :(得分:37)

您应该使用markAsDirty方法,如下所示:

control.markAsDirty();

这也将所有直接祖先标记为脏以维护模型。

Docs link

答案 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();
        }
    }
相关问题