Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 尝试创建数组的副本,然后将其与数组进行比较,以查看它是否更改_Angular - Fatal编程技术网

Angular 尝试创建数组的副本,然后将其与数组进行比较,以查看它是否更改

Angular 尝试创建数组的副本,然后将其与数组进行比较,以查看它是否更改,angular,Angular,在我的Angular程序中,我有一个表格,每当你点击一行,它就会进入另一个组件,row edit.component,该行就会变成输入框,这样你就可以编辑数据并传递所选行的编号。我希望能够复制表中显示的数组,这样,如果有人更改了他们不想更改的内容,他们只需点击“取消”按钮,即可将行重置为原来的行。如何制作阵列的副本?-我原以为我做了什么,但当它显示在控制台上时,我只是得到了未定义的 以下是我的阵列模型: 公共类数据 { [关键] 公共int ID{get;set;} public int Em

在我的Angular程序中,我有一个表格,每当你点击一行,它就会进入另一个组件,
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不是一个函数,我不太清楚为什么