Angular 将服务注入模块的所有组件中
我有一个由一个组件和一堆子组件组成的模块。还有一项专门用于此模块的服务 我不确定是否理解我需要的注射方法。 我想做的是将服务注入到所有子组件中 当我向组件中注入带有提供者的服务时,这是可以的,但我想在模块级设置提供者 模块Angular 将服务注入模块的所有组件中,angular,typescript,Angular,Typescript,我有一个由一个组件和一堆子组件组成的模块。还有一项专门用于此模块的服务 我不确定是否理解我需要的注射方法。 我想做的是将服务注入到所有子组件中 当我向组件中注入带有提供者的服务时,这是可以的,但我想在模块级设置提供者 模块 import { NgModule } from '@angular/core'; import { ChangeUserComponent } from './change-user.component'; import { ChangeUserSidebarCompon
import { NgModule } from '@angular/core';
import { ChangeUserComponent } from './change-user.component';
import { ChangeUserSidebarComponent } from './sidebar/sidebar.component';
import { ChangeUserUserListComponent } from './user-list/user-list.component';
import { ChangeUserService } from './change-user.service';
@NgModule({
declarations: [
ChangeUserComponent,
ChangeUserUserListComponent,
ChangeUserSidebarComponent
],
providers : [
ChangeUserService // <-- when i set that it's not working
],
exports : [
ChangeUserComponent
]
})
export class ChangeUserModule
{
}
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable()
export class ChangeUserService
{
constructor(
private _http: HttpClient
){}
}
当我在组件级别设置提供者时,服务被正确注入,但我想在模块级别设置它
编辑:当我在组件级别设置关键字提供程序时:一切正常
在模块级设置关键字提供程序时:
错误:未捕获(承诺中):NullInjectorError:StaticInjectorError(AppModule)[ChangeUserSidebarComponent->ChangeUserService]:
StaticInjectorError(平台:核心)[ChangeUserSidebarComponent->ChangeUserService]:
NullInjectorError:ChangeUserService没有提供程序
有办法吗?我遗漏了什么吗?嗯,这很有趣 在组件级别,您可以注入服务(因此您可以直接在每个子组件中注入服务,但这不仅会很麻烦,而且每个组件都会有其新的服务实例) 但是如果你把我关在一个地牢里,并说无论如何我都会这么做。我将延迟加载该模块 说明:
嗯,这很有趣 在组件级别,您可以注入服务(因此您可以直接在每个子组件中注入服务,但这不仅会很麻烦,而且每个组件都会有其新的服务实例) 但是如果你把我关在一个地牢里,并说无论如何我都会这么做。我将延迟加载该模块 说明:
我不会把任何人关在地牢里做那件事;-) 最后,我决定遵循第一个解决方案,将服务注入根目录。不想做一些复杂的事情来避免一些可能/不应该发生的事情(即:将服务使用到另一个组件中,而不是专门用于此服务的组件中) 最初我真正想做的是将服务范围仅限于它的模块,并将其提供给模块的子组件 将服务放在根目录下,允许我共享该服务,我将假设该服务不应由应用程序的其他部分使用
无论如何,我仍然不知道为什么将服务设置到模块中在我的环境中不起作用。我不会把任何人锁在地牢里这样做;-) 最后,我决定遵循第一个解决方案,将服务注入根目录。不想做一些复杂的事情来避免一些可能/不应该发生的事情(即:将服务使用到另一个组件中,而不是专门用于此服务的组件中) 最初我真正想做的是将服务范围仅限于它的模块,并将其提供给模块的子组件 将服务放在根目录下,允许我共享该服务,我将假设该服务不应由应用程序的其他部分使用
无论如何,我仍然不知道为什么将服务设置到模块中在我的上下文中不起作用。有问题吗?您的模块片段是正确的,这就是您在整个应用程序上注册单例提供者的方式。如果您得到一个错误,您必须向我们显示一个特定的错误。注入是在构造函数中完成的,而不是在提供程序部分。它应该能按你的要求工作。错误是什么?是的,当我在模块级设置provider时,编译器yell,我已经编辑了这个问题。我不想为整个应用程序注册它(根目录中提供的可注入?),而只是为模块和该模块导入的所有组件注册(在示例ChangeUserComponent、ChangeUserListComponent和ChangeUserSidebarComponent中). 目标是只在模块级别注册服务,以便所有导入的组件都不设置关键字pr
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable()
export class ChangeUserService
{
constructor(
private _http: HttpClient
){}
}