Семантика @Injectable(предоставляется в: "корень")?

Просто хочу убедиться, что я понимаю семантику @Injectable(providedIn: 'root'), До Angular 6, если мы импортируем модуль из NPM, который содержит сервис, мы объявим этот модуль в нашем модуле приложения так, чтобы все приложение имело доступ к сервису. Что-то вроде этого:

    import { SomeNPModule } from '@ngx/SomeNPModule';

    @NgModule({
    imports: [
        BrowserModule,
        SomeNPModule
    ]
    })
    export class AppModule {}

Теперь мы можем ввести SomeService что модуль обеспечивает, потому что мы импортировали модуль. С Angular 6 необходимо импортировать SomeNPModule в AppModule удаляется, потому что мы используем @Injectable(providedIn: 'root) на самой службе, и когда аннотация запускается, она автоматически делает службу доступной в root контейнер для инъекций?

Обновить

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

1 ответ

Решение

Когда ты пишешь @Injectable(providedIn: 'root') это означает, что сервис в едином доступе для всего приложения, и вы можете внедрить его в любом месте приложения.

Если вы хотите создать синглтон службы только для конкретного модуля, вам необходимо назначить свой модуль в качестве параметра для providedIn - @Injectable(providedIn: MyModule)

Единственное другое действие, необходимое для использования @Injectable оформленный сервис - импортировать его, а конструктор - и все. Нет необходимости импортировать его в AppModule,

Другие вопросы по тегам