问题: 具有值的常量变量作为模型阵列正在进行更改,而不会直接更改该变量。
我的模特是:
export class Section {
sectionId : string;
sectionLabel : string;
sectionIcon : string;
sectionComponents : Array<SectionComponent>;
}
现在我必须声明这个模型的一个默认数组变量,它必须在项目
的任何地方保持不变此模型的适当json是:
SECTIONS_CONST: Section[] = [
{
sectionId: 'testId',
sectionLabel: 'testLabel',
sectionIcon : 'testIcon',
sectionComponents : [
{
sectionComponentId : 'testSectionComponentId',
label : 'test label',
inputModels : [
{
inputName : 'testName',
model : ''
}
],
componentBasedData : null,
selectedQuerys : []
}
]
}
]
注意:这个数组在我的代码中正常工作,但唯一的问题是,在这个数组中没有任何值必须改变任何值。
我尝试了很多方法,如下所示:
- 在课堂上将此变量设为私有,并通过getter方法返回此变量的值
- 将此变量导出为常量
- 尝试过Object.assign({},yourObject);
- 尝试过Object.freeze()
- 尝试_.cloneDeep()
我尝试过更多的事情。
仍尝试使用不同的解决方案,但无法正常工作。
答案 0 :(得分:3)
您是否考虑过ReadonlyArray
并结合const
?
const SECTIONS_CONST: ReadonlyArray<Section> = ...
使用ReadonlyArray
,您将无法添加或更改项目:
// Not allowed
SECTIONS_CONST.push( ... );
SECTIONS_CONST[0] = ...
const
阻止了重新分配:
// Not allowed
SECTIONS_CONST = [];
但是,您仍然可以更改现有项目的属性:
SECTIONS_CONST[0].sectionId = null;
所以你可能也希望只读Section
的属性:
export class Section {
readonly sectionId : string;
// etc
}
// Not allowed
SECTIONS_CONST[0].sectionId = null;