Angular 2:如何跨不同路由共享非模块级服务

时间:2017-06-17 01:09:59

标签: angularjs angular-router

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

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

1 个答案:

答案 0 :(得分:0)

听起来您希望将ServiceA用作工厂而不是单身。这可以通过Factory Provider完成。

另见this答案。

  

有没有办法在ComponentB和ComponentC之间共享数据?谢谢!

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