angular - angular4.x, parameter i ngOnChanges-metoden
Här är ett officiellt exempel på kodsnutt:
ngOnChanges(changes: {[propKey: string]: SimpleChange}) {}
Min fråga är parametern för ngOnChanges.
changes är parametern, efter symbolen :, är typannoteringen.
Jag är förvirrad över {[propKey: string]: SimpleChange}.
Det verkar inte som en destrukturering och inte som opt: {key: string}.
Svar #1
Det antyder att om din egenskap (key) är av typen string så kommer den att returnera ett objekt av typen SimpleChanges. Detta är något som är relaterat till TypeScript, inte Angular.
Låt oss gräva oss in i lite mer detaljer:-
Låt oss säga att changes-objektet har något som detta {name: SimpleChange, age: SimpleChange}. Då innebär denna typvalidering att om du skickar en nyckel som sträng, till exempel "minor" så kommer det att returnera ett objekt av SimpleChange.
let updatedNameChanges = changes["name"];
// name is in string, so updatedNameChanges will be a SimpleChange object.
Dessutom, om du ville hoppa över detta, kan du göra det. Den enda skillnaden kommer att vara typkonvertering och validering.
Du kan också använda detta som referens:
ngOnChanges(changes: {[propKey: string]: SimpleChange}) {
let log:string[] = [];
for (let propName in changes) {
let changedProp = changes[propName];
let to = JSON.stringify(changedProp.currentValue);
if (changedProp.isFirstChange()) {
log.push(`Initial value of ${propName} set to ${to}`);
} else {
let from = JSON.stringify(changedProp.previousValue);
log.push(`${propName} changed from ${from} to ${to}`);
}
}
För ytterligare information, prova detta
Svar #2
{[propKey: string]: SimpleChange} är gränssnittet som beskriver en array av SimpleChange-objekt och propKey som ett strängindex (en ordbok).
Så ändringar: {[propKey: string]: SimpleChange} är en array av SimpleChange-objekt och propKey-strängindex
