@Injectable(providedIn: 'root') 的语义?
The semantics of @Injectable(providedIn: 'root')?
只是想确保我理解 @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
模式。如果我在评论中有任何错误,请纠正我。
当您写 @Injectable(providedIn: 'root')
时,这意味着该服务是针对整个应用程序的单一服务,您可以在应用程序的任何位置注入。
当你只想为一个确切的模块创建服务单例时,你需要将你的模块作为参数分配给 providedIn
- @Injectable(providedIn: MyModule)
使用 @Injectable
装饰服务所需的唯一其他操作是导入它,构造函数注入它,仅此而已。无需在 AppModule
.
中导入它
只是想确保我理解 @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
模式。如果我在评论中有任何错误,请纠正我。
当您写 @Injectable(providedIn: 'root')
时,这意味着该服务是针对整个应用程序的单一服务,您可以在应用程序的任何位置注入。
当你只想为一个确切的模块创建服务单例时,你需要将你的模块作为参数分配给 providedIn
- @Injectable(providedIn: MyModule)
使用 @Injectable
装饰服务所需的唯一其他操作是导入它,构造函数注入它,仅此而已。无需在 AppModule
.