typescript - Angular-klass fungerar inte
Jag försöker använda klasser i Angular för att göra mitt liv enklare men hittills fungerar det inte än. Nedan är min kod och det felmeddelande jag får:
import { WizardData } from '../models/wizard-data';
export class WizardPage {
private type: String;
private data: WizardData;
public getType(){
return this.type;
}
public setType(type: String){
this.type = type;
}
public getData(){
return this.data;
}
public setData(data: WizardData){
this.data = data;
}
}
och
import { Component, OnInit } from '@angular/core';
import { WizardPage } from '../../shared/models/wizard-page';
@Component({
selector: 'app-wizard-base',
templateUrl: './wizard-base.component.html',
styleUrls: ['./wizard-base.component.scss']
})
export class WizardBaseComponent implements OnInit {
wizardPage: WizardPage = new WizardPage();
wizardPage.setType("address");
constructor() { }
ngOnInit() {}
}
Detta ger ett fel på raden
wizardPage.setType("address");
Nämligen (CLI):
ERROR in src/app/wizard/wizard-base/wizard-base.component.ts(14,13): error TS1005: ';' expected.
src/app/wizard/wizard-base/wizard-base.component.ts(14,22): error TS1003: Identifier expected.
Och i Visual Studio Code:
[ts] Duplicate identifier 'wizardPage'.
[ts] Subsequent property declarations must have the same type. Property 'wizardPage' must be of type 'WizardPage', but here has type 'any'.
(property) WizardBaseComponent.wizardPage: WizardPage
Vet någon varför detta inte fungerar?
Tack!
Svar #1
Du kan deklarera medlemmar av en klass inuti en klass direkt, men du kan inte komma åt dem direkt. I princip kan du komma åt variabeln inuti vilken metod som helst i en klass, och den kommer att tillhöra this (kontext). Här bör du anropa ngOnit livscykel-hook.
ngOnInit() {
this.wizardPage.setType("address");
}
När det gäller att specificera åtkomst för en variabel i en underordnad eller ärvd klass, kan du använda åtkomstspecifierare, som kan vara public, protected, private. Dessa åtkomstspecifierare fungerar på ett liknande sätt som de gör i OOP-språk som C#, Java, etc. Tack @Florian för tipset i kommentaren.
