Website-Suche

angularjs - Angular Typescript Controller-Konstruktor wird nicht aufgerufen


Ich benutze Angular mit TypeScript.

Ich habe eine Modellklasse in TypeScript

module app.form {

    export class Patient{

        constructor(
            public firstName: string,
            public lastName: string,
            public gender: string,
            public birthDate: Date,
            public currentMedications: string,
            public notes: string,
            public isMedicare: boolean,
            public medicareName: string,
            public medications: string[],
            public ethnicity: string[],
            public billingInfo: BillingInformation,
            public specimenInfo: SpecimenInformation,
            public assayRequested: AssayRequested,
            public authorizationDetail: AuthorizationDetail
        ) {

        }
    }
}

Mein Controller-Code unter Verwendung von TypeScript sieht so aus

module app.form {
    export class MainController {
        constructor(public patient: Patient) {

        } 
    }   
}

Meine App-Datei sieht so aus.

module app.form {
    angular
        .module("formApp", [
            "ngMaterial",
            "ngMdIcons",
            "ngMessages"
        ])
        .controller("MainController", MainController);
}

Ich registriere alle Skripte in der HTML-Datei in dieser Reihenfolge

<script src="Scripts/angular.min.js"></script>
    <script src="Scripts/angular-resource.min.js"></script>
    <script src="Scripts/angular-animate/angular-animate.min.js"></script>
    <script src="Scripts/angular-aria/angular-aria.min.js"></script>
    <script src="Scripts/angular-messages.min.js"></script>
    <script src="Scripts/angular-material/angular-material.min.js"></script>
    <script src="Scripts/angular-material-icons/angular-material-icons.min.js"></script>

    <script src="app/model.js"></script>
    <script src="app/controllers/main-controller.js"></script>
    <script src="app/app.js"></script>

Wenn ich meine Anwendung starte, sehe ich diesen Fehler

Wo mache ich etwas falsch?

Antwort #1

Um den Fehler zu beheben, muss man das statische $inject im Controller verwenden, während man TypeScript benutzt

static $inject = [];

Antwort #2

Normalerweise injizierst du Daten nicht, sondern rufst sie von einem Dienst ab. Mit Daten meine ich Patient in deinem Haupt-Controller. Wie von @toskv in den Kommentaren erwähnt, ist dein Konstruktor nicht parameterlos, was bedeutet, dass Angular erwartet, dass du Parameter basierend auf dem Namen des Parameters ODER dem Namen im Injection-Args-String-Array injizieren kannst. Du hast nichts, das dem Variablennamen patient entspricht, um injiziert zu werden.

Ändere deinen Code so. Wenn du einen bestimmten Patienten abrufen möchtest, erstelle einen Service oder eine Factory dafür und injiziere ihn in deinen Controller und registriere diesen Service/Factory bei Angular.

module app.form {
    export class MainController {
        public patient: Patient; // make it a field
        constructor() {
           this.patient = new Patient(/*parameters here if any*/); //new instance
        } 
    }   
}

Verwandte Artikel