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

Era*_*abi 22 javascript angular

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

当我这样做时:

control.dirty = true;
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Cannot set property dirty of #<AbstractControl> which has only a getter
Run Code Online (Sandbox Code Playgroud)

Era*_*abi 47

你应该使用这个markAsDirty方法,如下所示:

control.markAsDirty();
Run Code Online (Sandbox Code Playgroud)

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

文档链接

  • 虽然我在SO上找到的每个帖子都说要调用markAsDirty,但这会成功地将控件设置为脏,但不会冒泡到NgForm或FormGroup.如果我在Chrome中检查这些对象,他们的"脏"吸气剂仍会返回false.我不知道为什么. (3认同)
  • @nogridbag 迟到总好过:`this.form.control.markAsDirty()` (2认同)

Yaz*_*leh 5

假设您从模板中调用该方法为:

<form #loginForm = "ngForm" (ngSubmit)="login(loginForm)"> ... </form>
Run Code Online (Sandbox Code Playgroud)

在您的 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;
    }
}
Run Code Online (Sandbox Code Playgroud)