2017-07-06 1 views
1

Dans mon programme Angular, j'ai besoin de créer une copie complète de mon objet afin que je puisse comparer les changements. Voici ce que j'ai essayé et je reçois une erreur dans ma console qui dit ERROR TypeError: .forEach is not a function. Comment puis-je réparer ça?ERREUR TypeError: .forEach n'est pas une fonction

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); 
 
    } 
 

 
}

+1

Il semble que cela devrait fonctionner. Est-il possible que l'entrée de ce composant n'envoie pas de tableau? – SaxyPandaBear

+0

@SaxyPandaBear Eh bien, je suppose que cela résout le problème. chaque fois que je fais un 'console.log (this.pto) de base, il l'affiche et dit que c'est un objet. Comment est-ce que je répliquerais quelque chose comme ceci mais pour un objet? – asdf

+1

Si vous regardez à l'aide d'outils de développement sur quelque chose comme Chrome ou Firefox, pouvez-vous voir quel est le contenu de l'objet? Est-ce qu'il contient un tableau dedans? – SaxyPandaBear

Répondre

1

Voir les commentaires sur la question initiale. Le problème initial, comme l'a souligné @SaxyPandaBear, était qu'une valeur de tableau était attendue pour le champ @Input() pto plutôt qu'un objet brut. Le type déclaré devait donc être modifié et l'instruction de clonage de tableau devait être remplacée par un clonage d'objet. déclaration.


Si vous voulez cloner un objet au lieu d'un tableau, utilisez:

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

ou (ma méthode préférée, car il a un meilleur support de vérification de type tapuscrit) la propagation opérateur:

this.opto = {...originalObject};