typescript - Angular 2 kan inte göra modellobjekts JSON konstant
Problem: Konstant variabel med värde som en matris av modeller ändras utan någon direkt ändring i den variabeln.
Min modell är :
export class Section {
sectionId : string;
sectionLabel : string;
sectionIcon : string;
sectionComponents : Array<SectionComponent>;
}
Nu måste jag deklarera en standard array-variabel av denna modell som måste vara konstant överallt i projektet
Lämplig json för denna modell är :
SECTIONS_CONST: Section[] = [
{
sectionId: 'testId',
sectionLabel: 'testLabel',
sectionIcon : 'testIcon',
sectionComponents : [
{
sectionComponentId : 'testSectionComponentId',
label : 'test label',
inputModels : [
{
inputName : 'testName',
model : ''
}
],
componentBasedData : null,
selectedQuerys : []
}
]
}
]
Observera: Denna array fungerar korrekt i min kod, men det enda problemet är att inga värden i denna array får ändras på något sätt.
Jag försökte många sätt som nedan :
- Gjorde denna variabel privat i klassen och returnerar värdet av denna variabel med en getter-metod
- Exportera denna variabel som konstant
- Försökte Object.assign({}, dittObjekt);
- Försökte Object.freeze()
- Försökte _.cloneDeep()
Och mycket mer saker jag försökte.
Fortsätter att prova med olika lösningar men kan inte få något att fungera.
Svar #1
Har du tittat på ReadonlyArray kombinerat med const?
const SECTIONS_CONST: ReadonlyArray<Section> = ...
Med ReadonlyArray kommer du inte att kunna lägga till eller ändra objekt:
// Not allowed
SECTIONS_CONST.push( ... );
SECTIONS_CONST[0] = ...
Och const förhindrar omtilldelning:
// Not allowed
SECTIONS_CONST = [];
Du kan dock fortfarande ändra en egenskap på ett befintligt objekt:
SECTIONS_CONST[0].sectionId = null;
Så du kanske också vill göra egenskaperna hos Section skrivskyddade:
export class Section {
readonly sectionId : string;
// etc
}
// Not allowed
SECTIONS_CONST[0].sectionId = null;
