在我的Angular程序中,我需要创建一个对象的深层副本,以便我能够比较这些更改。这是我尝试过的,我在控制台中收到ERROR TypeError: .forEach is not a function
的错误。我该如何解决这个问题?
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
import { PTOData } from './pto-data';
import { PTODataService } from './pto-data.service';
import { EmpInfo } from './emp-info';
import { EmpInfoService } from './emp-info.service';
@Component({
selector: '[pto-row-edit]',
templateUrl: `./row-edit.component.html`,
styleUrls: ['./row-edit.component.css']
})
export class RowEditComponent implements OnInit {
// Inputs & Outputs to/from grid component
@Input() pto: PTOData[];
@Input() rowSelected: number;
@Output() onDelete = new EventEmitter<number>();
@Output() onSave = new EventEmitter<number>();
opto: PTOData[];
private initialized: boolean = false;
ngOnInit(): void {
this.opto = [];
this.pto.forEach(x => this.opto.push(x))
console.log(this.opto);
}
constructor(
private ptodataService: PTODataService,
private empInfoService: EmpInfoService) { }
resetRow(pto: PTOData): void {
console.log(this.pto);
console.log(this.opto);
this.rowSelected = null;
this.onSave.emit(this.rowSelected);
}
}
&#13;
答案 0 :(得分:1)
请参阅原始问题的评论。正如@SaxyPandaBear所指出的那样,原始问题是@Input() pto
字段而不是普通对象需要一个数组值,因此需要更改声明的类型,并且需要替换array-cloning语句一个对象克隆声明。
如果要克隆对象而不是数组,请使用:
this.opto = Object.assign({}, originalObject);
或(我的首选方法,因为它有更好的TypeScript类型检查支持) spread 运算符:
this.opto = {...originalObject};