2012-06-26 15 views
44

Sono ancora molto nuovo in AngularJS e sto lavorando per impostare la mia prima applicazione. Vorrei essere in grado di effettuare le seguenti operazioni:Uso dei controller AngularJS creati con angular.module(). Controller()

angular.module('App.controllers', []) 
    .controller('home', function() { 
    $scope.property = true; 
    }]); 

angular.module('App', ['App.controllers']) 
    .config(['$routeProvider', function($routeProvider) { 
    $routeProvider.when('/', {templateUrl: 'partials/home.html', controller: home}); 
    }]); 

Utilizzando questa configurazione viene generato il seguente errore:

Uncaught ReferenceError: home is not defined from App 

La mia domanda è: come posso registrare i controller utilizzando angular.module.controller() (o $controllerProvider.register() direttamente) e utilizzare il controller registrato altrove nella mia app.

La mia motivazione: vorrei evitare di utilizzare le funzioni di global constructor come i miei controller (come la maggior parte degli esempi su angularjs.org use) o il namespaces complesso. Se riesco a registrare e utilizzare i controller come nomi di variabili singole (che non vengono poi inseriti nell'ambito globale) sarebbe l'ideale.

risposta

75

Provare a utilizzare un identificatore di stringa.

routeProvider.when('/', {templateUrl: 'partials/home.html', controller: 'home'});

Quando si utilizza un letterale, è alla ricerca di una variabile chiamata home, ma che non esiste in questo caso.

+1

Grazie, che ha fatto il trucco. Cosi 'semplice. –

+1

La soluzione di cui sopra non sembra funzionare ... Ricevo "Errore: Argomento 'PhoneListCtrl' non è una funzione, ha ottenuto una stringa". Aiuto! – mpowered

+24

Se si definisce il controller come una funzione ('function PhoneListCtrl() {}'), è necessario fare riferimento come funzione. Se lo definisci con .controller ('app.controller ('PhoneListCtrl', function() {})', dovresti fare riferimento a una stringa: –

Problemi correlati