AngularJS ma angular.copy()
do głębokiego kopiowania obiektów i tablic.Obiekty głębokiego kopiowania w Angular
Czy Angular ma coś takiego?
AngularJS ma angular.copy()
do głębokiego kopiowania obiektów i tablic.Obiekty głębokiego kopiowania w Angular
Czy Angular ma coś takiego?
To pytanie nie jest duplikatem How can I use angular.copy in angular 2, ponieważ PO pyta o kopiowanie głęboko obiektów. Połączona odpowiedź rekomenduje Object.assign(), która nie tworzy głębokiej kopii.
Faktycznie, używając Angular2 nie ograniczają możliwość korzystania z innych bibliotek jak jQuery do głębokiego kopiowania obiektów z ich $.clone() funkcji lub lodash z _.cloneDeep().
Najbardziej powszechne biblioteki mają swoje typowania dostępne za pomocą narzędzi CLI typings, więc nawet przy transporcie z TypeScript możesz bezproblemowo używać czegokolwiek, co chcesz.
zobacz także: What is the most efficient way to deep clone an object in JavaScript?
Inną opcją jest zaimplementować własną funkcję:
/**
* Returns a deep copy of the object
*/
public static deepCopy(oldObj: any) {
var newObj = oldObj;
if (oldObj && typeof oldObj === "object") {
newObj = Object.prototype.toString.call(oldObj) === "[object Array]" ? [] : {};
for (var i in oldObj) {
newObj[i] = this.deepCopy(oldObj[i]);
}
}
return newObj;
}
Nie mogę podać dokładnych dat kopiowania przy użyciu tej metody. –
Można również użyć:
JSON.parse(JSON.stringify(Object))
czy to na swoim zakresem, to w każdy element Angular, dyrektywę itp., a także w każdym środowisku węzła.
O ile nie ma odniesienia cyklicznego, to powinno działać i skutecznie oddzielić odniesienie do zmiennej do oryginalnego obiektu.
Wydaje się to bardzo prostą i skuteczną głęboką kopią! Dlaczego nie ma wyższego wyniku? Czy coś jest nie tak z tą odpowiedzią? – TSG
W przypadku rozwiązania do głębokiego kopiowania, które usunie wszystkie odniesienia, jest to najlepsza metoda dostępna w przeglądarce/CommonJS itp. Używam jej w produkcji, gdy potrzebna jest migawka obiektu. Sądzę, że przybyłem odpowiedzieć trochę późno, jak 1 rok za późno. @TSG –
Ponadto, jeśli używasz literału obiektowego z funkcjami na nim (nie tylko wartościami), zostaną one pominięte, ale możesz łatwo połączyć 'Obiekt.assing ({}, oldObject, JSON.parse (JSON.stringify (oldObject))) 'a to spowoduje ponowne wypełnienie właściwości funkcji z literału obiektu i JSON utworzy głęboką kopię bez żadnego związku z oryginałem. –
Można deep copy
obiekt w kątowa stosując metodę cloneDeep lodash za:
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.
Prawdopodobny duplikat [Jak mogę użyć angular.copy w kanciastym 2] (http://stackoverflow.com/questions/34688517/how-can-i-property- -copy-copy-inline- 2) –
'Duplicate' może, ale chciałem rozwiązanie' non-polyfill'. tak jak 'angular.copy()' –
To wszystko, co mamy. –