registerModule с зависимостями

Я создаю приложение с помощью MEAN.JS и пытаюсь использовать контроллер из другого модуля. Я обнаружил, что могу сделать это с помощью инъекции зависимостей:

angular.module(‘MyModule’, [‘Dependency’]);

Но способ создания модулей в MEAN.JS:

ApplicationConfiguration.registerModule('MyModule');

И я не могу просто передать второй параметр registerModule. Итак, как мне это сделать? Должен ли я использовать оба метода? Я что делаю неправильно?


Пример

Хочу добавить новую модель: Campaign. Campaigns создаются только администраторами, но могут быть видны владельцу кампании (другой User). Форма создания кампании должна содержать список доступных пользователей, чтобы администратор мог выбрать того, кто станет владельцем этого Campaign.
Проблема в том, что форма создания кампании контролируется CampaignsController, как я могу указать Users? Я использовал другой контроллер (UsersController), и в этом проблема, он не определен, потому что мы находимся в модуле Campaign.


РЕДАКТИРОВАТЬ:

Проблема заключалась в неправильном автоматическом перезапуске приложения grunt:
Я переместил контроллер из одного модуля (папки) в другой, но grunt все еще пытался загрузить его со старого пути и, таким образом, терпел неудачу: Контроллер не найден. Я думал, что проблема связана с внедрением зависимостей, но вам нужно только закрыть grunt (Ctrl + C) и запустить его снова. Проблема решена.
В любом случае, спасибо за ответ @gilBirman, потому что он правильный: нет необходимости вводить что-либо с помощью MEANJS.


person Salvatorelab    schedule 07.07.2014    source источник
comment
все модули angular автоматически вводят основной модуль ... поэтому вам не нужно вводить контроллер в другой модуль, чтобы использовать его там, где он у вас уже есть ...   -  person Poyraz Yilmaz    schedule 07.07.2014
comment
Я получаю 'UsersController' is not a function, got undefined ошибку при использовании UsersController из моего пользовательского модуля, что тогда это значит? При поиске ошибки все ответы не связаны с зависимостями, но все об angular без MEAN.JS   -  person Salvatorelab    schedule 07.07.2014


Ответы (2)


MEAN.js делает все модули, зарегистрированные через registerModule, доступными для всех других модулей в вашем приложении, добавляя их в качестве зависимости к основному приложению под названием mean. Вот часть исходного кода MEAN.js, которая делает это:

var applicationModuleName = 'mean';
....
// Add a new vertical module
var registerModule = function(moduleName) {
    // Create angular module
    angular.module(moduleName, []);

    // Add the module to the AngularJS configuration file
    angular.module(applicationModuleName).requires.push(moduleName);
};

Итак, вы на правильном пути, однако похоже, что вы пытаетесь внедрить контроллер. Однако в angular контроллеры не являются инъекционными. Вы можете вводить сервисы, фабрики, значения и константы.

person Gil Birman    schedule 10.07.2014
comment
Здравствуйте, это означает, что каждый модуль должен быть зависимым от среднего (корневого) -Module? Как настроить зависимости от подмодулей? - person Simon Fakir; 02.11.2014

Сначала создайте свой собственный модуль, например:

angular.module('app.controllers', []) - angular module with controllers.

затем добавьте контроллер в этот модуль:

angular.module('app.controllers', [])
       .controller('dashboard.admin.account.controller', ['$scope', ($scope) { .... }]);

затем создайте глобальный модуль, который будет привязан к вашей разметке:

angular.module('app', [
  'app.controllers'
  'ui.router',
  'ngAnimate'
]);

затем загрузите свой глобальный модуль для разметки:

domReady(function () {
  angular.bootstrap(document, ['app']);
});

Теперь вы можете использовать свой контроллер.

person Vitaliy Khudonogov    schedule 07.07.2014
comment
и что мне делать с registerModule? я должен удалить это? помните, я использую MEAN.JS, все немного по-другому: github.com/meanjs/mean - person Salvatorelab; 07.07.2014
comment
У меня нет компетентных знаний mean.js, но в документации указано, что модули angular необходимо использовать, как я описал screencast.com/t/ H1QWDJjfZ5. - person Vitaliy Khudonogov; 07.07.2014
comment
@VitaliyKhudonogov Из какой документации URL API я могу проверить этот снимок экрана - person Zaid Iqbal; 27.03.2016