2016-09-20 4 views
1

NGmodule дает способ организовать наш код в модулях.Угловой 2 и инжектор ngmodule

Он также предлагает предоставить некоторые услуги в качестве свойства модуля, и я не понимаю, как он работает.

Во-первых это означает, что если добавить сервис в обеспечивает свойство NGmodule, он будет выставить услугу (это означает, что я должен вызвать модуль внутри другого, чтобы воспользоваться его услугами)?

Итак, есть ли уровень инжектора NGmodule?

Как использовать службу за пределами модуля в другом модуле?

ответ

2

Предоставление услуг в модулях означает, что сервис будет создан и доступен всем компонентам, директивам и трубам, входящим в состав модуля. Слово «экземпляр» здесь ключевое: поскольку сервисы являются одиночными, модуль должен отслеживать службы для каждого компонента, директивы или канала, который их использует. Вы также можете предоставить услугу в отдельных компонентах, но это создаст экземпляр службы в каждом компоненте, фактически отрицая причину, по которой мы будем использовать услугу singleton в первую очередь. Обеспечение его на уровне модуля решает эту проблему для нас.

Если вы хотите, чтобы ваш сервис был доступен вне вашего модуля, вам не нужно ничего делать. Предоставление услуги внутри модуля, импортированного в ваш проект, означает, что он уже доступен в любом месте вашего проекта.

Похожие: Why is a service provided in a feature module available everywhere?

Если вы хотите, чтобы сделать компоненты, директивы или трубы доступны за пределами модуля, то вы должны экспорта их (и импортировать их в модуле, где вы хотите использовать их) , Вы можете сделать это, используя ключевое слово export в своем модуле.

Похожие: What classes should I export?

Например, вы можете использовать директиву NgIf, потому что он экспортируется из CommonModule (docs), который мы затем импортировать в наших собственных модулей:

@NgModule({ 
    declarations: [COMMON_DIRECTIVES, COMMON_PIPES], 
    exports: [COMMON_DIRECTIVES, COMMON_PIPES], 
    providers: [ 
    {provide: NgLocalization, useClass: NgLocaleLocalization}, 
    ], 
}) 

Интересный факт: если у вас есть только один модуль (корневой модуль, который загружается), тогда вы фактически будете использовать только BrowserModule вместо CommonModule. Причина, по которой все функции CommonModule в BrowserModule заключается в том, что BrowserModule просто импортирует и реэкспортирует весь CommonModule.

На сайте angular2 имеется подробное руководство по module system, если вы хотите получить дополнительную информацию. Страница часто задаваемых вопросов, которую я связывал ранее, также очень полезна.

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