加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular – 将Form设置为Pristine而不清除数据

发布时间:2020-12-17 08:03:34 所属栏目:安全 来源:网络整理
导读:我有一个表单显示 input type =“text”列表元素。它们共享一个共同的保存按钮,该按钮在表单变脏之前被禁用。然后,一旦用户单击“保存”按钮,数据将被提交给服务器。如果服务器成功保存了数据,我想将表单重置为原始状态,但我想保留表单中的所有数据,以
我有一个表单显示< input type =“text”>列表元素。它们共享一个共同的保存按钮,该按钮在表单变脏之前被禁用。然后,一旦用户单击“保存”按钮,数据将被提交给服务器。如果服务器成功保存了数据,我想将表单重置为原始状态,但我想保留表单中的所有数据,以便用户可以进一步编辑数据。

搜索之后,我找到了NgForm.reset()方法。虽然这确实将形式设置为原始形式,但遗憾的是它也清除了形式。重置方法似乎确实有一个值参数,但我似乎无法找出它的作用。不过,我不希望数据被清除。

我也尝试了myForm.pristine = true,但由于某种原因,这会导致重新加载页面。

Here is a plunkr demonstrating the problem。

目前我可以提出两种可能的解决方案。
第一个非常接近你的建议,因为表单的重置方法具有以下签名并接受表单值作为第一个参数:
//@angular/forms/src/model.d.ts:
reset(value?: any,{onlySelf}?: { onlySelf?: boolean; }): void;

在提交处理程序中,我们将捕获最后一个状态的副本:

const { myForm: { value: formValueSnap } } = this;

并重置自己:

this.myForm.reset(formValueSnap,false);

当时没有可能重置表单的时候另一个选择是创建一个帮助方法,它将每个控件标记为原始并保留数据。它可以在同一个提交助手中调用,而不是重置。

private _markFormPristine(form: FormGroup | NgForm): void {
    Object.keys(form.controls).forEach(control => {
        form.controls[control].markAsPristine();
    });
}

链接到更新的plunkr。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读