2016-09-15 12 views
14

角度2を使用してオブジェクトを別のオブジェクトにコピーするにはどうすればよいですか?angular2:オブジェクトを別のオブジェクトにコピーする方法

私はangular.copy()を使用してオブジェクトを古いオブジェクトの緩い参照にコピーしました。

Error: angular is not defined.

+2

[角度2でangular.copyを使用するにはどうすればいいですか](https://stackoverflow.com/questions/34688517/how-can-i-use-angular-copy-in-angular-2) – sisve

答えて

38

ソリューション

Angular2は活字体とES6のような近代的な技術の地面に開発された:しかし、ときに私は、エラーの下に取得した角度2で同じ使用しました。したがって、あなたはただlet copy = Object.assign({}, myObject)を行うことができます。

- いい例。ネストされたオブジェクトのための let copy = JSON.parse(JSON.stringify(myObject))

+1

これはネストしたオブジェクトでは機能しません。ネストされたオブジェクトをどのように深くコピーできますか? –

+1

これはオブジェクトを参照によってコピーします。 myObjectの変更が 'copy'オブジェクトに影響を与えないように、参照でコピーしたい場合はどうすればいいですか? – Mano

+0

@ PratapA.Kあなたのシステムに別のライブラリをロードできる場合、loadshを見てください。 _cloneDeepなどの関数を持っています。 – PeterS

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

が、この文句を言わない仕事:ネストされたオブジェクトについては

。 SO代替は、我々は深いコピーオブジェクトのために、サードパーティのライブラリを使用することができますネストされたオブジェクトのための

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

stringifyは私の入れ子の必要性のために働いた。ありがとう。 – 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 

だろう。 lodashの場合 、前に示唆したように、深いコピーオブジェクトが内部のネストされたオブジェクトを有するクリーンな方法はlodashのcloneDeep法を使用することによるものである_.cloneDeep()

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

を使用します。

角度のために、あなたはこのようにそれを行うことができます。

yarn add lodashまたはnpm install lodashでlodashをインストールします。あなたのコンポーネントで

は、cloneDeepをインポートし、それを使用します。

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

それが唯一の18キロバイトの利益のためにも価値が、ビルドに追加されます。

lodashのcloneDeepを使用する理由についてさらに詳しい情報が必要な場合は、article hereも書いています。

関連する問題