只想确保我了解@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
模式。如果我在评论中有任何错误,请纠正我。
答案 0 :(得分:8)
当您编写@Injectable(providedIn: 'root')
时,这意味着该服务针对整个应用程序是单一的,并且您可以在应用程序中的任何位置注入。
如果只想为一个确切的模块设置服务单例,则需要将模块作为参数分配给providedIn
-@Injectable(providedIn: MyModule)
要使用装饰有@Injectable
的服务,唯一需要执行的其他操作就是将其导入,然后构造函数将其注入,仅此而已。无需将其导入AppModule
。