在我的Angular程序中,我有一个表,无论何时单击一行,它都会进入另一个组件row-edit.component
,并且该行将变为输入框,以便您可以编辑数据并通过选择的行号。我希望能够制作表格中显示的数组的副本,这样如果有人更改了他们并不意味着的内容,他们只需按下取消按钮,它就会将行重置为原来是什么。如何制作阵列的副本? - 我想我曾经做过什么,但当它显示在控制台上时,我只是得到了undefined
这是我的阵列模型:
public class PTOData
{
[Key]
public int ID { get; set; }
public int EmpKey { get; set; }
public string type { get; set; }
public DateTime date { get; set; }
public string fullhalf { get; set; }
public int hours { get; set; }
public string scheduled { get; set; }
public string notes { get; set; }
public bool inPR { get; set; }
public DateTime? prDate { get; set; }
}
}

这里是我的.html中调用main函数的地方:
<button class="btn btn-default btn-primary btn-sm" (click)="resetRow(pto)"><i class="fa fa-ban" aria-hidden="true"></i></button>
&#13;
这里是我.ts文件的相关部分,console.log(this.origPTO);
就是这样,我可以看到打印出来的内容,目前我正在{{1}在控制台中
undefined
&#13;
答案 0 :(得分:1)
您的作业声明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));