Контроллеры модулей пространства имен Angular.js

У меня есть следующая структура в моем каталоге приложений:

scripts/
   modules/
     module1/
       controllers/
          MainController.js
     module2/
       controllers/
          MainController.js
   main.js

Чего я хочу добиться, так это поместить контроллеры в каждом модуле в свое собственное пространство имен, например:

module1.MainController
module2.MainController

Поэтому, когда я использую в html директиву ng-controller="MainController", она знает, из какого модуля ее обслуживать. Также было бы хорошо, чтобы модули могли общаться друг с другом.

Пожалуйста, объясните мне, как я могу добиться этого наилучшим образом, и возможно ли это вообще?


Я нашел что-то вроде этого: http://jsfiddle.net/luisperezphd/j5jzsppv/, но я не уверен, что это хорошее решение. Он использует angular.ng-modules.js.


РЕДАКТИРОВАТЬ: я пытаюсь использовать Angular.js v.1.3.6. На версии 1.2.x проблем с пространствами имён нет.


person mkatanski    schedule 15.12.2014    source источник


Ответы (1)


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

var moduleTwo = angular.module('moduleTwo', ['otherModule']);

Это позволяет moduleTwo осознавать otherModule. Затем вы можете использовать службу для обмена состоянием между контроллерами. Службы являются одноэлементными (существует только один экземпляр), поэтому, если несколько контроллеров используют одну и ту же службу, они будут совместно использовать это состояние.

person arhoskins    schedule 15.12.2014
comment
Хорошо, я провел небольшое исследование об обмене состояниями, и это все об обмене данными между контроллерами. А как насчет пространств имен? Тем не менее, когда я ввожу два модуля, у которых есть контроллеры с одинаковыми именами, результат берется только из модуля, который вводится в конце. - person mkatanski; 15.12.2014