Избегайте привязки переменных Angular/TypeScript
Мне нужно создать клон моего объекта, не создавая его ссылку. Когда я пытаюсь скопировать EquipmentClass, witch - это мой главный объект для его клона, и если я изменю какое-либо свойство EquipmentClass, это также изменит мой EquipmentClassCloneEdit. И я не хочу, чтобы это случилось.
Я попытался присвоить значение следующим образом:
this.equipmentClassCloneEdit = Object.assign ({}, this.equipmentClass);
это моя модель:
export class EquipmentClass {
equipmentClassId: number;
name: string;
description: string;
isDeleted: boolean;
propertyValuesList: EquipmentClassPropertyValue[] = [];
}
2 ответа
Пытаться this.equipmentClassCloneEdit = JSON.parse(JSON.stringify(this.equipmentClass))
Object.assign()
создает поверхностную копию, поэтому она не будет работать с не примитивами, такими как ваш массив propertyValuesList.
Вы можете использовать метод lodash cloneDeep для глубокого клонирования. https://lodash.com/docs/
- установить пакет 'lodash'
import cloneDeep from 'lodash/cloneDeep';
- просто позвони
this.equipmentClassCloneEdit = cloneDeep(this.equipmentClass);
Использование такого рода функций клонирования лучше выполнять с помощью stringify, а затем анализировать решение, поскольку оно также сохраняет члены, которые JSON вводит при строковом преобразовании, например функции, символы, BigInts и т. Д.