我在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在勾号中删除/重新添加表单。是的,这是一个很小的工作,直到他们可以修复:)
希望能帮上忙

10-06 04:35
查看更多