2017-01-29 13 views
1

Если я хочу изолировать службу в одном модуле, я должен создать один корневой компонент для модуля и использовать providers на этом компоненте (as said docs).Угловая - где предоставлять услуги?

Если я использую providers на модуле, услуга become application level. Таким образом, это способ предоставления услуг на уровне приложений (как это сделано в example).

Но в следующем, docs says:

Не указать приложение в масштабах поставщиков одноэлементные в общем модуле. Ленивый загруженный модуль, который импортирует этот общий модуль, сделает свою собственную копию этой услуги.

Таким образом, мы не должны использовать модули providers для предоставления общих услуг. Итак, что мы должны использовать? AppModule providers? Должны ли мы предоставлять все общие службы в AppModule? Когда мы должны использовать providers функциональных модулей?

Похоже, поставщики модулей являются общими, но вы не должны использовать их как общие. WTF?

ответ

2

Не указывать провайдеров Singleton в приложении общего доступа в общем модуле. Ложный загруженный модуль, который импортирует этот общий модуль, сделает свою собственную копию сервиса.

Это относится только к ленивым загружаемым модулям. Поставщики в не-ленивых загружаемых модулях всегда добавляются в область приложения.

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

Чтобы обеспечить предоставление всех услуг на уровне корня, выполните метод forRoot() и предоставите там службы. Затем импортируйте услугу на AppModule с imports: [MyModule.forRoot()]

+0

Привет, Гюнтер, можете ли вы представить пример того, как реализовать 'forRoot()'? Недавно я пытался играть с этим, но безуспешно. –

+0

Если вы используете ленивый, то провайдеры модулей не должны использоваться, не так ли? Я хотел бы разработать архитектуру приложения с ленивыми модулями. Я не хочу разрабатывать приложение, которое работает только без ленивых модулей. Должен ли я всегда использовать forRoot для всех общих служб? И, как реализовать это тоже интересно. – Pavel

+0

https://angular.io/docs/ts/latest/guide/ngmodule.html#!#core-for-root. показывает, как это сделать. Да, я думаю, вы должны использовать 'forRoot()' для всех глобальных поставщиков. –