Angular 2无法使模型对象的json常量

时间:2017-05-25 15:36:43

标签: angular typescript

问题: 具有值的常量变量作为模型阵列正在进行更改,而不会直接更改该变量。

我的模特是:

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()
  •   

我尝试过更多的事情。

仍尝试使用不同的解决方案,但无法正常工作。

1 个答案:

答案 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;