我有一个服务ServiceA
,它有自己的状态(实例变量等),在我的模块中,我有多个服务实例ServiceA
。
@Injectable()
export class ServiceA {
// It defines instance variables.
}
由于我需要有ServiceA
的多个实例,因此我无法将其设为模块级组件。
在ComponentB
实例化ServiceA
实例并可能改变其状态:
@Component({
providers = [ServiceA],
})
export class ComponentB {
// changes the state of ServiceA.
}
同样在ComponentB
的HTML模板中,我有ComponentC
的路由,需要访问相同的ServiceA
实例:
<a routerLink="/path_to_component_c"></a>
以下是ComponentC
:
@Component({
providers = [],
})
export class ComponentC {
// accesses ServiceA.
}
如果ServiceA
是模块级组件,则ComponentB
和ComponentC
之间不会出现共享问题,因为它们都位于同一模块中。但是,由于ServiceA
直接注入ComponentB
,我无法再这样做了。请注意,每次只创建一个ComponentC
并在ComponentC
之后创建ComponentB
。
有没有办法在ComponentB
和ComponentC
之间共享数据?谢谢!
答案 0 :(得分:0)
听起来您希望将ServiceA
用作工厂而不是单身。这可以通过Factory Provider完成。
另见this答案。
有没有办法在ComponentB和ComponentC之间共享数据?谢谢!
有几种方法。服务是一个(是的,您可以为您的工厂实例提供服务!)。如果ComponentC
是ComponentB
的孩子,则可以使用input。