Angular 尝试创建数组的副本,然后将其与数组进行比较,以查看它是否更改
在我的Angular程序中,我有一个表格,每当你点击一行,它就会进入另一个组件,Angular 尝试创建数组的副本,然后将其与数组进行比较,以查看它是否更改,angular,Angular,在我的Angular程序中,我有一个表格,每当你点击一行,它就会进入另一个组件,row edit.component,该行就会变成输入框,这样你就可以编辑数据并传递所选行的编号。我希望能够复制表中显示的数组,这样,如果有人更改了他们不想更改的内容,他们只需点击“取消”按钮,即可将行重置为原来的行。如何制作阵列的副本?-我原以为我做了什么,但当它显示在控制台上时,我只是得到了未定义的 以下是我的阵列模型: 公共类数据 { [关键] 公共int ID{get;set;} public int Em
row edit.component
,该行就会变成输入框,这样你就可以编辑数据并传递所选行的编号。我希望能够复制表中显示的数组,这样,如果有人更改了他们不想更改的内容,他们只需点击“取消”按钮,即可将行重置为原来的行。如何制作阵列的副本?-我原以为我做了什么,但当它显示在控制台上时,我只是得到了未定义的
以下是我的阵列模型:
公共类数据
{
[关键]
公共int ID{get;set;}
public int EmpKey{get;set;}
公共字符串类型{get;set;}
公共日期时间日期{get;set;}
公共字符串fullhalf{get;set;}
公共整数小时数{get;set;}
公共字符串调度{get;set;}
公共字符串注释{get;set;}
公共bool inPR{get;set;}
公共日期时间?prDate{get;set;}
}
}
您的分配声明origPTO:PTOData[]=this.pto代码>发生在@Input()
发生之前。相反,将分配放在OnInit
生命周期挂钩中:
import { OnInit } from '@angular/core';
export class RowEditComponent implements OnInit {
@Input() pto: PTOData[];
origPTO: PTOData[];
ngOnInit(): void {
this.origPTO = this.pto;
}
}
这仍然不是你想要的,因为它不是一个深度复制。对pto
的任何更改也将对origPTO进行。
您应该在原始阵列中循环以制作深度副本:
this.origPTO = [];
this.pto.forEach(x => this.origPTO.push(x));
@HaveSpacesuit我不能只设置一个等于数组的变量吗?同样在执行constcopy={this.pto}时
,我在
上得到一个错误,上面写着“”:“'expected.
”,或者在执行const copy=this.pto;
时,我得到“类成员不能有'const'关键字。
“我没有深入研究您的代码,但是如果您将一个变量设置为数组的值,那么您实际上是在创建对它的引用。因此,如果更改数组,新变量将发生更改,因此无法恢复。在AngularJS中,您可以执行angular.copy
来创建深度副本。这就是我要研究的问题。@HaveSpacesuit好吧,我该如何将它设置为一个变量呢?每当我这样做的时候,我都会在控制台中找到未定义的
。谢谢!但是,每当我在ngOnInit()
函数中循环数组时,控制台中就会出现一个错误,它说this.pto.forEach不是一个函数
,您可能需要进行一些调试,并确保将某些内容传递到输入中。仔细想想,您的PTOData
似乎是一个对象,不是数组。因此,您应该声明@Input()pto:PTOData代码>和origPTO:PTOData代码>。然后尝试在ngOnInit
中设置this.origPTO=this.pto
,不要迭代任何内容。它们只是一起更改。我需要找到一种制作深度拷贝的方法。我使用控制台看到我带来了一些东西,它只是不断地说forEach不是一个函数,我不太清楚为什么