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:

  1. Eksportuttalelse for kontrollklasse. Fra koden du postet ser jeg at du mangler en export-uttalelse for klassen ShouldWorkController. 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.
  2. 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."
  3. 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.
  4. 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
  5. Sjekk at navnet på kontrolleren din samsvarer med det som er angitt i $stateProvider-konfigurasjonen din.