2016-09-15 31 views
14

Lütfen açısal 2'yi kullanarak nesneyi başka bir nesneye kopyalamak için bana yardımcı olun.angular2: nesne başka bir nesneye nasıl kopyalanır

Açısal olarak, eski nesnenin gevşek başvurusuna nesne kopyalamak için angular.copy() kullanılır.

Error: angular is not defined.

+2

Olası çoğaltılabilir [Açısal 2'yi angular.copy'de nasıl kullanabilirim] (https://stackoverflow.com/questions/34688517/how-can-i-use-angular-copy-in-angular-2) – sisve

cevap

38

Çözüm

Angular2 typescript ve ES6 gibi modern teknolojilerin zeminde gelişmiştir: Ama, ne zaman ben hata altına alma açısal 2'de aynı kullandı. Yani sadece let copy = Object.assign({}, myObject) yapabilirsiniz.

Object assign - güzel örnekler. İç içe nesneler için

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

+1

Bu iç içe geçmiş nesneler için işe yaramaz. Yuvalanmış nesneleri nasıl kopyalayabiliriz? –

+1

Bu, bir nesneyi referans olarak kopyalayacaktır. "Kopyala" nesnesini etkileyen myObject öğesindeki herhangi bir değişikliği önlemek için referans olarak kopyalamak istiyorsam ne olur? – Mano

+0

@ PratapA.K Sisteminize başka bir kitaplık yükleyebiliyorsanız, loadsh'a bakın. _cloneDeep gibi işlevlere sahiptir. – PeterS

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

ama iç içe nesneler için bu alışkanlık iş. SO alternatif derin kopyalama nesneler için, 3. parti kütüphanelerin kullanabilirsiniz İçiçe Nesne için

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

stringify benim yuvalama ihtiyaçları için çalıştı. Teşekkürler. – 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 

olurdu. önce belirtildiği gibi lodash durumunda, _.cloneDeep()

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

kullanın derin kopyalama nesnelerin temiz yolu içinde nesneleri iç içe lodash en cloneDeep yöntemini kullanmaktır sahip.

Eğik için, böyle yapabilirsiniz:

yarn add lodash veya npm install lodash ile lodash takın. senin bileşeninde

, cloneDeep ithal ve kullanmak:

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

Sadece 18kb yararları için iyi değer, Yapınızda de eklenir.

Ayrıca lodash'ın cloneDeep'ini kullanma konusunda daha fazla bilgiye ihtiyacınız varsa, bir article here yazdım.

İlgili konular