2016-09-15 34 views
14

Hãy giúp tôi sao chép đối tượng vào đối tượng khác bằng góc 2?angular2: cách sao chép đối tượng vào đối tượng khác

Trong góc cạnh tôi đã sử dụng angular.copy() để sao chép đối tượng để tham chiếu lỏng lẻo của đối tượng cũ. Tuy nhiên, khi tôi được sử dụng tương tự ở góc 2 nhận được dưới đây lỗi:

Error: angular is not defined.

+2

Bản sao có thể có của [Làm cách nào tôi có thể sử dụng angular.copy ở góc 2] (https://stackoverflow.com/questions/34688517/how-can-i-use-angular-copy-in-angular-2) – sisve

Trả lời

38

Giải pháp

Angular2 phát triển trên nền tảng công nghệ hiện đại như nguyên cảo và ES6. Vì vậy, bạn chỉ có thể thực hiện let copy = Object.assign({}, myObject).

Object assign - ví dụ hay.

Đối với đối tượng lồng nhau: let copy = JSON.parse(JSON.stringify(myObject))

+1

điều này sẽ không hoạt động đối với các đối tượng lồng nhau. Làm thế nào chúng ta có thể sao chép sâu các đối tượng lồng nhau? –

+1

Điều này sẽ sao chép một đối tượng bằng cách tham chiếu. Điều gì xảy ra nếu tôi muốn sao chép bằng tham chiếu, để tránh bất kỳ thay đổi nào trong myObject ảnh hưởng đến đối tượng 'sao chép'. – Mano

+0

@ PratapA.K Hãy xem loadsh, nếu bạn có thể tải một thư viện khác trong hệ thống của bạn. Nó có các chức năng như _cloneDeep. – PeterS

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

nhưng công việc này wont cho các đối tượng lồng nhau. SO một sự thay thế sẽ là

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

xâu chuỗi làm việc cho các nhu cầu làm tổ của tôi. Cảm ơn. – 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 

Đối với đối tượng lồng nhau chúng ta có thể sử dụng các thư viện của bên thứ 3, cho các đối tượng sao chép sâu. Trong trường hợp lodash, sử dụng _.cloneDeep()

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

Như đã đề cập trước đây, con đường sạch sẽ của các đối tượng sao chép sâu khi đối tượng lồng vào bên trong là bằng cách sử dụng phương pháp cloneDeep lodash của.

Đối kiễu góc, bạn có thể làm điều đó như thế này:

Install lodash với yarn add lodash hoặc npm install lodash.

Trong thành phần của bạn, nhập cloneDeep và sử dụng nó:

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

Nó chỉ 18kb thêm vào xây dựng của bạn, cũng có giá trị đối với những lợi ích.

Tôi cũng đã viết article here, nếu bạn cần hiểu rõ hơn về lý do sử dụng cloneDeep của lodash.

Các vấn đề liên quan