错误类型错误:.forEach不是函数

时间:2017-07-06 19:39:53

标签: angular

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

1 个答案:

答案 0 :(得分:1)

请参阅原始问题的评论。正如@SaxyPandaBear所指出的那样,原始问题是@Input() pto字段而不是普通对象需要一个数组值,因此需要更改声明的类型,并且需要替换array-cloning语句一个对象克隆声明。

如果要克隆对象而不是数组,请使用:

this.opto = Object.assign({}, originalObject);

或(我的首选方法,因为它有更好的TypeScript类型检查支持) spread 运算符:

this.opto = {...originalObject};