2012-06-26 8 views
44

Todavía soy muy nuevo en AngularJS y estoy trabajando en la configuración de mi primera aplicación. Me gustaría ser capaz de hacer lo siguiente:Uso de AngularJS Controladores creados 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}); 
    }]); 

Usando esta configuración se genera el siguiente error:

Uncaught ReferenceError: home is not defined from App 

Mi pregunta es: ¿Cómo me puedo registrar controladores utilizando angular.module.controller() (o $controllerProvider.register() directamente) y use el controlador registrado en otra parte de mi aplicación.

Mi motivación: me gustaría evitar el uso de funciones de constructores globales como mis controladores (como la mayoría de los ejemplos en el uso de angularjs.org) o espacios de nombres complejos. Si puedo registrar y usar los controladores como nombres de variables individuales (que no se ponen entonces en el alcance global) sería ideal.

Respuesta

75

Intenta usar un identificador de cadena.

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

Cuando se utiliza un literal, que está en busca de una variable llamada home, pero que no existe en este caso.

+1

Gracias, que hizo el truco. Tan sencillo. –

+1

La solución anterior no parece funcionar ... Me aparece "Error: Argumento 'PhoneListCtrl' no es una función, tiene cadena". ¡Ayuda! – mpowered

+24

Si define el controlador como una función ('función PhoneListCtrl() {}'), debe hacer referencia a él como una función. Si lo define con .controller ('app.controller ('PhoneListCtrl', function() {})', debe hacer referencia a él como una cadena. –

Cuestiones relacionadas