我在Angular2.1中有一个模板驱动的表单,它包含许多标准控件(<input>, <select>
等)和一个自定义控件,它本身包含多个输入元素。
我已经在自定义控件上实现了controlvalueaccessor,它正在正确地将更改的/接触的/有效的值传播到父窗体。
然而。。在父窗体上,我有一个save按钮,在保存之后,我想清除dirty/tocked状态(因为这会影响应用的css),如下所示:
save(myForm: NgForm) {
myForm.form.markAsPristine();
myForm.form.markAsUntouched();
}
对于顶级父窗体和自定义控件本身中的所有元素来说,这是正常的,但是自定义控件中的
<input>
字段仍被标记为touch/dirty(这将接收预先保存的样式)。当自定义控件的脏/触状态更改时,是否有方法通知它,以便它可以清除要匹配的子
<input>
元素?似乎如果<input>
元素在自定义控件中,它们不会通过调用父窗体上的markaspristine/untouched来更新。谢谢!
最佳答案
尝试像这样添加
myForm.form.controls['nameOfControl'].markAsPristine();
上面的代码只适用于表单控件。
以下似乎是一个不错的解决方案:
active = true;
newModel() {
this.model = new yourModel(2, '',true, '');
this.active = false;
setTimeout(() => this.active = true, 0);
}
使用新模型重置窗体并还原“原始”类状态。
通过切换“active”标志将通过ngif在勾号中删除/重新添加表单。是的,这是一个很小的工作,直到他们可以修复:)
希望能帮上忙