我正在尝试使用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();
}
有人请告诉我我做错了什么?
答案 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}}。
以下是其他一些尚未实现的参考资料。目前只有解决方法:
一个建议是:
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;
}