2017-06-17 62 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

相關問題