Angular,有没有办法 "markAsTouched" 没有表单的字段?

Angular, is there a way to "markAsTouched" a field without a Form?

我已经知道 FormControl 中的 input 项可以通过调用以下任何方法(可能更多)标记为 dirttouched group.markAsTouched(); form.get('control-name').markAsTouched(); form.markAllAsTouched(); form.controls[someIndex].markAsTouched();

但是,我可以看到当输入focus然后blur.

时似乎调用了markAsTouched方法

有没有办法通过代码实现相同的结果?? 比方说,当点击一个按钮时。


在这里,你可以看到the current standard behaviour without a form的动图,你也可以在下面的live sample中自己测试一下:

https://stackblitz.com/edit/angular-peq11f

对我来说,很明显这种行为应该可以由代码触发,而不仅仅是在 blur 事件被触发时

像这样:

<input #myInput>
<button (click)="myInput.markAsTouched()">click</button>

您可以使用独特的 formControl <input [formControl]="control">markAsTouched

<input [formControl]="control">
<button (click)="control.markAsTouched()">click</button>
{{control.touched}}

你在.ts

// as a property
control = new FormControl();

// or in a function
this.control.markAsTouched();

一个FormControl可以属于一个FormGroup也可以不属于。此外,没有必要有标签 input。我们正在使用标签输入来更改值,但是如果您删除 input,控件也会标记为已触摸