Angular 将已更改的字段保存在列表中,格式为

Angular 将已更改的字段保存在列表中,格式为,angular,typescript,angular-reactive-forms,Angular,Typescript,Angular Reactive Forms,我想知道是否有任何方法可以返回表单中更改的字段。我需要创建一个包含已更改字段的字符串列表 我有一个很大的表单,大约有30个字段 一种方法是滚动所有字段,但这会有点痛苦,因为我有保存对象的键,也有保存对象列表的键 如果有一个函数可以返回表单上更改的所有字段和对象,那就太好了 什么是正确的方法来做这件事在角与反应形式? 如果可能的话,在这里写一段代码,或者写一些提示,说明如何对我的表单上更改的字段进行验证 StackBlitz:以下方法将返回已更改的值列表: getDirtyValuesForFor

我想知道是否有任何方法可以返回表单中更改的字段。我需要创建一个包含已更改字段的字符串列表

我有一个很大的表单,大约有30个字段

一种方法是滚动所有字段,但这会有点痛苦,因为我有保存对象的键,也有保存对象列表的键

如果有一个函数可以返回表单上更改的所有字段和对象,那就太好了

什么是正确的方法来做这件事在角与反应形式? 如果可能的话,在这里写一段代码,或者写一些提示,说明如何对我的表单上更改的字段进行验证


StackBlitz

以下方法将返回已更改的值列表:

getDirtyValuesForForm(formName: any) {
        let dirtyValues = {};

        Object.keys(formName.controls)
            .forEach(key => {
                let currentControl = formName.controls[key];

                if (currentControl.dirty) {
                    if (currentControl.controls)
                        dirtyValues[key] = this.getDirtyValues(currentControl);
                    else
                        dirtyValues[key] = currentControl.value;
                }
            });

        return dirtyValues;
}
您可以检查控件的脏标志。请看这里的表格

如果保存初始表单值,则可以进行比较以了解更改的内容


您可以看到一个示例正在运行。

到目前为止您尝试了什么?你能和我分享一下斯塔克尼茨吗?不,没有反应形式的东西。你只需要研究一下vanilla js如何比较两个对象,这里有一些选项:目前我无法创建任何逻辑,我正在考虑如何做,因为我有一个带有许多字段的表单,这将是一个带有键的大对象,键有另一个对象作为值。如果你这样做:form.value.entries()并使用lodash,您可以比较更改前后的表单。这不包括用户与字段交互但重新键入原始值的情况。getDirtyValues方法是什么?这种方法适用于FormControl类型控件,但是,我无法判断FormGroup类型的控件中更改了哪些字段。
如果有一个函数可以返回在我的窗体上更改的所有字段和对象,那就太好了。
->您可以在需要验证changes@LuizRicardoCardoso这是一个通用函数,您可以传递任何形式组,它将返回已更改的值。使用此技巧,您可以实现您的要求正如您所演示的,您只需检查
FormControl
,但在我的表单上,我还需要检查
FormGroup
FormArray
何时更改请参见此处: