避免 Angular/TypeScript 变量绑定

Avoid Angular/TypeScript variable binding

我需要创建对象的克隆,而不创建它的引用。 当我尝试复制 EquipmentClass 时, 是我对其克隆的主要对象, 如果我更改一些 属性 的 EquipmentClass,它也会更改我的 EquipmentClassCloneEdit。我不希望发生这种情况。

我试过这样赋值:

this.equipmentClassCloneEdit = Object.assign({}, this.equipmentClass);

这是我的模型:

export class EquipmentClass {
    equipmentClassId: number;
    name: string;
    description: string;
    isDeleted: boolean;
    propertyValuesList: EquipmentClassPropertyValue[] = [];
}

尝试this.equipmentClassCloneEdit = JSON.parse(JSON.stringify(this.equipmentClass))

Object.assign() 创建一个浅表副本,因此它不会像您的 propertyValuesList 数组那样在 non-primitives 上工作。

您可以使用lodash 的cloneDeep 方法进行深度克隆。 https://lodash.com/docs/#cloneDeep

  1. 安装'lodash'包
  2. import cloneDeep from 'lodash/cloneDeep';
  3. 就叫它:this.equipmentClassCloneEdit = cloneDeep(this.equipmentClass);

使用这种克隆函数最好从 stringify 然后解析解决方案,因为它还保留了 JSON 在字符串化时 ingores 的成员,例如 Functions、Symbols、BigInts 等