使原始的角形控件变脏

Est*_*ask 8 javascript typescript angular angular-reactive-forms

Angular 4中有一个反应形式,某些控制应该在某个时刻以编程方式设置.

this.form = formBuilder.group({
  foo: ''
});
...
this.form.controls.foo.setValue('foo');
Run Code Online (Sandbox Code Playgroud)

如何控制原始/脏状态?目前我正在使用两者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>
Run Code Online (Sandbox Code Playgroud)

如果pristine/dirty应该只指定人工交互并且不能以编程方式进行更改,那么这里有什么解决方案?

And*_*riy 26

formControlhas markAsDirty()markAsPristine()methods的每个实例,所以,你应该能够运行

this.form.controls.foo.markAsPristine()
Run Code Online (Sandbox Code Playgroud)

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

this.form.get('foo').markAsPristine()
Run Code Online (Sandbox Code Playgroud)

甚至

this.form.markAsPristine()
Run Code Online (Sandbox Code Playgroud)

markAsDirty()方法也可以这样做