javascript - 'ShouldWorkController' er ikke en funksjon. Fikk undefined
Når jeg prøver å knytte en kontroller til en mal ved å bruke angular-ui-router $stateProvider, får jeg følgende feil:
'ShouldWorkController' is not a function. Got undefined.
Men når jeg erklærer kontrolløren inne i malen ved å bruke ng-controller, fungerer alt fint. Hva kan være galt her?
app.ts
module App {
var dependencies = [
MyControllers
]
function configuration($stateProvider: ng.ui.IStateProvider) {
$stateProvider
.state("shouldWork", {
url: "/shouldWork",
templateUrl: "app/shouldWork.html"
controller: "ShouldWorkController" // does not work
});
}
}
shouldWorkController.ts
module App.MyControllers {
interface IShouldWorkViewModel {
}
class ShouldWorkController implements IShouldWorkViewModel {}
}
SkalFungere.html
<div ng-controller="ShouldWorkController as viewModel" us-spinner spinner-key="spinner-1">
^ --- this works nicely
Svar #1
Den meldingen betyr at en slik controller "ShouldWorkController" ikke er lastet inn i hoved Angular module. Sørg for at du registrerer den på slutten:
module App.MyControllers {
...
class ShouldWorkController implements IShouldWorkViewModel {}
}
// we have to register this controller into some module (MyControllers)
// which is also referenced in the main app module
angular.module('MyControllers')
.controller('ShouldWorkController', App.MyControllers.ShouldWorkController );
Svar #2
Jeg innser at dette er gammelt, men jeg kom hit via Google med det samme problemet, ikke for første gang. Ting å sjekke inkluderer:
- Eksportuttalelse for kontrollklasse. Fra koden du postet ser jeg at du mangler en
export-uttalelse for klassenShouldWorkController. Dette er kanskje ikke problemet i ditt tilfelle, men det er noe du bør sjekke. Jeg kan gjenskape denne feilen ved å fjerne eksportuttalelsen fra mine kontrollklasser. - Sjekk at HTML-malen din finnes (hvis du bruker UI-Router). Som beskrevet i UI-Router-dokumentasjonen: "Kontrolleren vil ikke bli opprettet hvis malen ikke er definert."
- Registrer dine controllere i samme fil som controlleren. Noen opplæringsprogrammer viser hvordan controllere registreres i modul-filen. Selv om dette fungerer, har jeg personlig funnet det mer feilutsatt enn å registrere controlleren direkte i controller-filen.
- Sjekk dine TypeScript-referanser. Sørg for at du legger til TypeScript-referanser (f.eks.
///<reference path="../app/services/shouldWorkService.ts">) til TypeScript-filer som inneholder typer som du refererer til - Sjekk at navnet på kontrolleren din samsvarer med det som er angitt i $stateProvider-konfigurasjonen din.
