如何在提交表单后将控制组原始状态重置为true?

时间:2016-05-21 05:58:57

标签: angular

我正在尝试使用markAsPristine()提交表单后将控制组原始状态重置为true ...但它没有发生,得到这样的错误" markAsPristine不是函数" ...我不希望在提交后重建表单,所以我只想使用此markaspristine函数将控制组原始状态设置为true(引用https://github.com/angular/angular/pull/6679)。这是我的演示http://plnkr.co/edit/W8Fs6O6QsMCG1AWhxzqv?p=preview ...

onsubmit(){
  console.log(this.model);
  this.model.markAsPristine();
}
有人请告诉我我做错了什么?

3 个答案:

答案 0 :(得分:1)

来自Angular documentation, forms

的文档
active = true;

  newHero() {
    this.model = new Hero(42, '', '');
    this.active = false;
    setTimeout(()=> this.active=true, 0);
  }

然后在你的模板中

<form *ngIf="active">

当活动为false时,会破坏并重新创建表单。

如上所述,这是一种临时解决方法。

答案 1 :(得分:0)

正如您可以阅读原始拉取请求一样,它已移至another pull request。然而,该公关已经关闭:

  

这个PR是陈旧的(没有改变;通过CI;暂时没有活动)。这可能是我们的错,我们很抱歉。为了控制我们的PR队列,并阻止我们花太长时间回到你身边,我们正在清理队列。不幸的是,这意味着这个PR正在关闭。

因此,您正在寻找的功能尚未合并,因此无法使用。

正如您所提到的,您可以重建表单,如您所见[{3}}。

以下是其他一些尚未实现的参考资料。目前只有解决方法:

  1. here
  2. https://github.com/angular/angular/issues/6169
  3. 一个建议是:

    this.form['_touched'] = false;
    StringMapWrapper.forEach(this.form.controls, (control: AbstractControl, name: string) => {
      control['_touched'] = false;
    });
    

    另一种方式:

    {{1}}

    请参阅GitHub上的问题以获取解决方法。除此之外,还没有内置的解决方案。

答案 2 :(得分:0)

您可以尝试这样做,首先需要检查天气形态或模型是否脏污。

onsubmit(){
  console.log(this.model);
  if (this.model.dirty) {
return confirm('You have unsaved changes. Are you sure you want to navigate away?');
        }
        return true;
}
相关问题