2017-06-17 65 views
0

我有一个服务ServiceA,它有自己的状态(实例变量等),在我的模块中我有多个服务实例ServiceAAngular 2:如何在不同路由上共享非模块级服务

@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是一个模块级组件,不会有问题在ComponentBComponentC之间共享,因为它们都在同一个模块中。但是,由于ServiceA直接注入ComponentB,我无法再这样做。请注意,每次只有一个ComponentC将被创建,ComponentC被创建后ComponentB

有没有办法在ComponentBComponentC之间共享数据?谢谢!

回答

0

这听起来像你想使用ServiceA作为工厂而不是一个单身人士。这可以通过Factory Provider完成。

另请参阅this答案。

是否有共享以componentB和ComponentC之间的数据的方法吗?谢谢!

有几种方法。服务就是一种(是的,您可以为您的工厂实例提供服务!)。如果ComponentCComponentB的孩子,则可以使用input

相关问题