使原始 Angular 表单控件变脏

Make pristine Angular form control dirty

Angular4 中有一个反应形式,某些控件应该在某些时候以编程方式设置。

this.form = formBuilder.group({
  foo: ''
});
...
this.form.controls.foo.setValue('foo');

如何控制 pristine/dirty 状态?目前我同时使用 formfoo 原始状态,例如:

<form [formGroup]="form">
  <input [formControl]="form.controls.foo">
</form>

<p *ngIf="form.controls.foo.pristine">
  {{ form.controls.foo.errors | json }}
</p>

<button [disabled]="form.pristine">Submit</button>

如果 pristine/dirty 应该仅指定人机交互并且不能以编程方式更改,那么这里哪种解决方案更可取?

formControl 的每个实例都有 markAsDirty()markAsPristine() 方法(继承自 AbstractControl),因此,您应该能够 运行

this.form.controls.foo.markAsPristine()

或更好,使用反应形式 API:

this.form.get('foo').markAsPristine()

甚至

this.form.markAsPristine()

同样可以用markAsDirty()方法完成