87 votes

angular2 : comment copier un objet dans un autre objet

Veuillez m'aider à copier l'objet dans un autre objet en utilisant angular 2 ?

Dans angular, j'ai utilisé angular.copy() pour copier les objets vers la référence libre des anciens objets. Mais, lorsque j'ai utilisé la même chose dans angular 2 obtenir l'erreur ci-dessous :

Erreur : angular n'est pas défini.

3 votes

192voto

Mikki Points 3739

Solution

Angular2 a été développé sur la base de technologies modernes comme TypeScript et ES6.

Donc vous pouvez juste faire let copy = Object.assign({}, myObject) .

Affectation des objets - de bons exemples.

Pour les objets imbriqués : let copy = JSON.parse(JSON.stringify(myObject))

6 votes

Cela ne fonctionnera pas pour les objets imbriqués. Comment peut-on faire une copie profonde d'objets imbriqués ?

4 votes

Cela permet de copier un objet par référence. Que faire si je veux copier par référence, afin d'éviter que toute modification de monObjet n'affecte l'objet "copié".

0 votes

@PratapA.K Jetez un œil à loadsh, si vous pouvez charger une autre bibliothèque dans votre système. Il a des fonctions telles que _cloneDeep.

61voto

Ankit Raonka Points 1166
let copy = Object.assign({}, myObject).  as mentioned above

mais cela ne fonctionne pas pour les objets imbriqués. Une alternative serait donc

let copy =JSON.parse(JSON.stringify(myObject))

1 votes

A fonctionné pour moi lorsque des objets imbriqués sont présents, merci.

14voto

BogdanC Points 1399

Comme nous l'avons suggéré précédemment, la façon la plus propre de copier profondément des objets contenant des objets imbriqués est d'utiliser la méthode cloneDeep de lodash.

Pour Angular, vous pouvez procéder comme suit :

Installer lodash avec yarn add lodash ou npm install lodash .

Dans votre composant, importez cloneDeep et l'utiliser :

import * as cloneDeep from 'lodash/cloneDeep';
...
clonedObject = cloneDeep(originalObject);

Ce n'est que 18kb ajoutés à votre construction, cela en vaut la peine pour les avantages.

J'ai également écrit un article ici si vous avez besoin de plus d'informations sur l'utilisation de cloneDeep de lodash.

1 votes

Cela fonctionne pour moi ! Merci :) Il semble incroyable qu'un langage de programmation de haut niveau ne puisse pas gérer une "copie" sans référence...

11voto

Kabb5 Points 1060

Vous pouvez le faire en Angular avec ECMAScript6 en utilisant l'opérateur d'étalement :

let copy = {...myObject};

13 votes

Dévalorisé parce que la copie contiendra une référence à l'ancien objet.

5voto

rajesh kumar Points 213
let course = {
  name: 'Angular',
};

let newCourse= Object.assign({}, course);

newCourse.name= 'React';

console.log(course.name); // writes Angular
console.log(newCourse.name); // writes React

Pour les objets imbriqués, nous pouvons utiliser des bibliothèques tierces, pour copier en profondeur les objets. Dans le cas de lodash, utilisez _.cloneDeep().

let newCourse= _.cloneDeep(course);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X