2016-09-15 16 views
14

Proszę mi pomóc, aby skopiować obiekt do innego obiektu za pomocą kątowego 2?angular2: jak skopiować obiekt do innego obiektu

W kanciastym użyłem metody angle.copy(), aby skopiować obiekt do luźnego odniesienia do starego obiektu. Jednak, gdy użyłem samo w kątowym 2 Wprowadzenie poniżej błędu:

Error: angular is not defined.

+2

Możliwy duplikat [Jak mogę użyć angular.copy w kanciastym 2] (https://stackoverflow.com/questions/34688517/how-can-i-use-angular-copy-in-angular-2) – sisve

Odpowiedz

38

Rozwiązanie

Angular2 opracowane na ziemi nowoczesnych technologii, takich jak maszynopis i ES6. Więc możesz po prostu zrobić let copy = Object.assign({}, myObject).

Object assign - ładne przykłady.

Dla obiektów zagnieżdżonych: let copy = JSON.parse(JSON.stringify(myObject))

+1

to nie zadziała dla zagnieżdżonych obiektów. Jak możemy głęboko zagnieżdżać obiekty zagnieżdżone? –

+1

Powoduje skopiowanie obiektu przez odniesienie. Co jeśli chcę skopiować przez referencję, aby uniknąć jakichkolwiek zmian w myObject wpływających na obiekt "kopiuj". – Mano

+0

@ PratapA.K Zobacz loadsh, jeśli możesz wczytać inną bibliotekę do swojego systemu. Ma funkcje takie jak _cloneDeep. – PeterS

8
let copy = Object.assign({}, myObject). as mentioned above 

ale to przyzwyczajenie praca dla obiektów zagnieżdżonych. SO alternatywą byłoby

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

stringify pracował dla moich potrzeb gniazdowania. Dzięki. – Brent

1
let course = { 
    name: 'Angular', 
}; 

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

newCourse.name= 'React'; 

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

Dla obiektu zagnieżdżonego możemy użyć bibliotek 3rd party, na głębokich obiektów kopiowanie. W przypadku lodash użyć _.cloneDeep()

let newCourse= _.cloneDeep(course); 
-1

Jak sugerowano wcześniej, czysty sposób głębokich obiektów kopiowania po zagnieżdżone obiekty wewnątrz jest za pomocą metody cloneDeep lodash użytkownika.

Dla kątowe, można zrobić to tak:

Install lodash z yarn add lodash lub npm install lodash.

W komponentu, importować cloneDeep i używać go:

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

to tylko 18KB dodany do budowy, warto za korzyści.

Napisałem również article here, jeśli potrzebujesz więcej informacji na temat używania cloneDeep lodasha.

Powiązane problemy