尝试制作数组的副本,然后将其与数组进行比较,看它是否发生变化

时间:2017-07-06 17:32:16

标签: angular

在我的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;
&#13;
&#13;

这里是我.ts文件的相关部分,console.log(this.origPTO);就是这样,我可以看到打印出来的内容,目前我正在{{1}在控制台中

&#13;
&#13;
undefined
&#13;
&#13;
&#13;

1 个答案:

答案 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));