2017-08-22 70 views
0

我有一個服務用於跟蹤我的模型的狀態。我有多個組件,我想訪問此服務變量屬性。當第一個組件加載到init時,我設置了模型,但是當我嘗試從路由更改後的第二個組件訪問此模型時,該變量現在是未定義的。以下是我正在談論的一個例子。Angular2在路由更改時重置服務變量

組件1個

constructor(private service: Service, private route) 

ngOninit(){ 
    this.service.setModel(); 
    console.log(this.service.getModel()); <-- works fine 
} 

componentButton1Click(){ 
    route.navigateByUrl(component2route) <--works fine 
} 

組件2

constructor(private service: Service) 

ngOninit(){ 
    console.log(this.service.index); <-- undefined 
} 

服務

private index: number; 

constructor(private http: Http) 

getModel(){ 
    return this.index; <-- works fine 
} 

setModel(){ 
    this.index = this.http.get('somejsonfile.json').index; 
} 

回答

3

這個問題的最常見的原因是該服務被註冊一個以上的時間。檢查每個組件和模塊中的providers陣列的內容,並確保它僅在ONE位置註冊。

下面的代碼片段:

providers: [ 
    ProductService, 
    ProductGuardService 
    ] 

這些都是@Component@NgModule

+0

這是它的一部分!我有全球的服務,並在多個模塊提供商,所以我把它從一切,只是把它放在app.module。當我能夠時, – Monzingo

+0

將在幾分鐘內接受答案 – Monzingo