确定 NgForm 看起来是否与任何用户输入之前完全一样
似乎
form.dirty
在更改后不会对其值进行编辑,并且form.touched
似乎总是false
无论如何:dirty
istouched
和touched
is tetched。
模板.html
<form #form="ngForm" (ngSubmit)="handleSubmission($event, {}, form)">
...
<input
#input
type="text"
[name]="item.title"
[(ngModel)]="item.estimate"
(ngModelChange)="handleEstimateChange(item, item.estimate, input, form)"
/>
...
</form>
组件.ts
export class LeComponent {
@Input('data') public data: any;
public handleEstimateChange: Function;
constructor(private $: Sandbox) {
this.handleEstimateChange = $.debounce(this.handleEstimate.bind(this), (1000*0.2));
}
handleEstimate(item: any, estimate: number, input: HTMLInputElement, form: NgForm) {
if (!estimate) delete item.esitmate;
(this, item, estimate, input, form);
// Why does form.dirty never change back to pristine again???
}
}
在 TypeScript 中,我对处理程序进行去抖动ngModelChange
处理,以便 Angular 有机会form.dirty
在我检查它之前更改值。这是因为在对象被修改ngModelChange
之前被触发。NgForm
如果!estimate
, 因为estimate === ""
, 则将其设置回其原始值undefined
。在这种情况下,表单应该看起来与任何用户输入发生之前完全一样。
但是,当我在注释正上方的行上放置一个断点并输出form.dirty
到 时console
,NgForm 永远不会变dirty
回false
.
是否可以确定表单看起来是否与任何用户输入之前完全一样?
显然,我可以编写自己的脏逻辑,但这是否意味着那NgForm
是无用的?一定有什么我想念的,对吧?肮脏怎么可能不意味着肮脏?
我已经查看了其他一些 SO 问题——第一个类似但绝对不是我要问的问题。他们在问这是否是故意的——我不在乎;我想知道如何实现上述目标。
关闭,但没有雪茄: