2012-06-26 2 views
44

Я все еще очень новичок в AngularJS и работаю над настройкой своего первого приложения. Я хотел бы быть в состоянии сделать следующее:Использование контроллеров AngularJS, созданных с помощью 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}); 
    }]); 

С помощью этой установки генерируется следующая ошибка:

Uncaught ReferenceError: home is not defined from App 

Мой вопрос: Как я могу зарегистрировать контроллеров с помощью angular.module.controller() (или $controllerProvider.register() непосредственно) и используйте зарегистрированный контроллер в другом месте в моем приложении.

Мотивация: Я бы хотел избежать использования глобальных функций-конструкторов в качестве моих контроллеров (как и большинство примеров использования углов) или сложного пространства имен. Если я могу регистрировать и использовать контроллеры в качестве имен отдельных переменных (которые затем не помещаются в глобальную область), это было бы идеально.

ответ

75

Попробуйте использовать строковый идентификатор.

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

При использовании буквальным, он ищет переменную с именем home, но не существует в этом случае.

+1

Спасибо, что сделал трюк. Так просто. –

+1

Вышеупомянутое решение, похоже, не работает ... Я получаю сообщение «Ошибка: аргумент« PhoneListCtrl »не является функцией, получил строку». Помогите! – mpowered

+24

Если вы определяете контроллер как функцию ('function PhoneListCtrl() {}'), вы должны ссылаться на него как на функцию. Если вы определяете его с помощью .controller ('app.controller ('PhoneListCtrl', function() {})', вы должны ссылаться на него как на строку. –

Смежные вопросы