angularjs - Construtor do Controlador Angular TypeScript não chamado
Estou usando Angular com TypeScript.
Eu tenho uma classe de modelo em 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
) {
}
}
}
Meu código de Controlador usando TypeScript é assim
module app.form {
export class MainController {
constructor(public patient: Patient) {
}
}
}
Meu arquivo de aplicativo parece assim.
module app.form {
angular
.module("formApp", [
"ngMaterial",
"ngMdIcons",
"ngMessages"
])
.controller("MainController", MainController);
}
Estou registrando todo o script no arquivo HTML nesta ordem
<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>
Quando executo meu aplicativo, vejo este erro
Onde estou errando?
Resposta #1
Para resolver o erro, deve-se usar o static $inject no controlador ao usar TypeScript
static $inject = [];
Resposta #2
Normalmente você não injeta dados, mas os recupera de um serviço. Por dados, quero dizer Patient no seu controlador principal. Como mencionado por @toskv nos comentários, seu construtor não é sem parâmetros, o que significa que o Angular vai esperar que você possa injetar parâmetros nele com base no nome do parâmetro OU no nome na matriz de strings de argumentos de injeção. Você não tem nada que corresponda ao nome da variável patient para ser injetado.
Altere seu código assim. Se você quiser recuperar um paciente específico, crie um Serviço ou Fábrica para isso e injete-o em seu controlador e registre esse Serviço/Fábrica com o 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
}
}
}
