ウェブサイト検索

angularjs - Angular Typescript コントローラーコンストラクターが呼び出されない


私はTypeScriptでAngularを使用しています。

私は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
        ) {

        }
    }
}

私のコントローラーコードは、TypeScriptを使うとこのようになります

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

        } 
    }   
}

私のアプリのファイルはこのようになっています。

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

私はこの順序でhtmlファイルにすべてのスクリプトを登録しています

<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>

アプリケーションを実行すると、このエラーが表示されます

私がどこで間違っているのですか?

回答 #1

エラーを解決するには、TypeScriptを使用する際にコントローラーで静的な $inject を使用する必要があります

static $inject = [];

回答 #2

通常、データを注入するのではなく、サービスから取得します。ここでデータと言うのは、あなたのメインコントローラー内の Patient を指します。コメントで @toskv が述べているように、あなたのコンストラクターはパラメータなしではないため、Angular はパラメータ名または注入引数の文字列配列内の名前に基づいて、それにパラメータを注入できることを期待しています。注入される患者 (patient) という変数名に一致するものは何もありません。

コードをこのように変更してください。特定の患者を取得したい場合は、それを行うサービスまたはファクトリーを作成し、それをコントローラーに注入し、そのサービス/ファクトリーを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
        } 
    }   
}

関連記事