2016-08-21 2 views
0

У меня есть основной модуль приложения, и у этого должны быть дочерние модули, но я не хочу, чтобы эти дети использовали сервисы или компоненты от других, я хочу, чтобы они были полностью изолированы, потому что они будут вести себя как суб-приложения.Можно ли изолировать модуль AngularJS от остальных?

AppModule 
    - ModuleA 
    - ModuleB 

Например, в следующей Plunker, я хочу иметь privateService в ModuleA не по moduleB, доступный для.

https://plnkr.co/edit/PewaB7kGZp2I6XCxPMW9?p=preview

Как я могу это сделать? Могу ли я продолжить использование ui-router?

+0

Это то, для чего предназначены модули. Пожалуйста, объясните трудности, которые вы испытываете при таком подходе. Ответ «Возможно» слишком короткий, чтобы быть допущенным к публикации (и, кстати, имеет очень мало значения). – estus

+0

Если у меня есть родительское приложение, которое вводит два других модуля, например ** moduleA ** и ** moduleB **, moduleA может использовать все службы и компоненты модуляB, и это то, что я хочу предотвратить. –

+0

Если moduleA зависит от модулей moduleB, модуль B должен быть загружен как зависимость в модуле A. Если moduleA использует некоторые модули moduleB, но не все, блоки должны быть разделены на общий модуль, который загружается как модулем, так и модулемB. – estus

ответ

1

Демаркация между модулями (sharedModule, privateModuleA, privateModuleB) является семантической.

Модуль (например, privateModuleA) не должен использовать единицы из другого модуля (например, privateModuleB), если последний модуль не указан как зависимость от первого. Противоположность можно считать плохой практикой, и ее следует избегать.

В отличие от углового 2, который имеет a hierarchy of injectors, у AngularJS есть один инжектор для каждого приложения. После загрузки модуля его единицы доступны в других модулях, которые загружаются в этот экземпляр инжектора. Это ожидаемое поведение, которое невозможно изменить.

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