Подтвердить что ты не робот

Вложенные модули в AngularJS

Фон

У меня есть N angular модулей. Одним из них является корневой контейнер, который загружается и существует весь жизненный цикл страницы. Все остальные N-1 - это игры, вложенные внутри страницы, и их необходимо загружать динамически и разгружать (как разгружать модули angularjs).

.------------------.
|Container         |
|  .----------.    |
|  |Game      |    |
|  |          |    |
|  |          |    |
|  `----------`    |
`------------------`

Подробнее

Каждая игра - это тот же способ angular -модуль, который имеет в качестве основного контейнера зависимости выполнение некоторого взаимодействия с API.

Пример

После некоторых экспериментов я обнаружил, что в Angularjs 1.1.5 вложенные модули почти (!) работают правильно: http://plnkr.co/edit/kJao7o

Но с новым словом Angularjs (1.2.0-rc2): http://plnkr.co/edit/ZyhbRu

Почему почти?

В этом примере все еще возникает исключение:

Ошибка: аргумент 'GameCtrl' не является функцией, получил undefined

Я попытался использовать ng-include для предотвращения автоматической инъекции из AngularJS. Но все равно такая же проблема (http://plnkr.co/edit/EM1MbB);

Что не так?

Я знаю, что невозможно использовать вложенное ng-приложение на той же странице http://docs.angularjs.org/api/ng.directive:ngApp

Как?

Но как можно использовать более одного вложенного модуля angular на одной странице (с собственными контроллерами)?

Ошибка?

И я не знаю, просто ли это временная ошибка или команда angular решила избежать вложенных модулей. Кто-нибудь знает об этом?

Плохая идея?

Или, если использование модулей для такой проблемы - плохая идея - для чего это лучшее решение?

Причина использования модулей в этом приложении

  • Изоляция области имени (во избежание столкновения имен). Я могу гарантировать, что любая из двух или более будущих игр не будет использовать одни и те же имена ctrls или что-то еще:
  • Переход к выгрузке модулей (я не знаю, возможно ли это в AngularJs - но я попытаюсь);
4b9b3361

Ответ 1

О! Я просто понял, что ты идешь. На самом деле у вас неправильное понимание компонентов Angular.

  • Angular модуль - это просто логическая оболочка для контроллеров, директив, заводов и т.д. Например, у вас будет модуль "main" и несколько подмодулей "moduleA" и "moduleB"

Они не имеют никакого отношения к модулям разметки, это всего лишь логическая единица в вашем приложении.

  • В вашем примере вы, надеюсь, имеете в виду области. В вашем приложении может быть несколько областей, и у них могут быть дети или дети. И в этом случае вы можете загрузить или выгрузить объект, который создал область

Подробнее см. официальное руководство для разработчиков.