Angular2服务变量在路由更改时重置

时间:2017-08-22 18:09:46

标签: angular service angular2-routing

我有一项服务,用于跟踪模型的状态。我有多个组件,我想访问此服务变量属性。当第一个组件在init上加载时,我设置了模型,但是当我尝试在路由更改后从我的第二个组件访问此模型时,该变量现在是未定义的。以下是我正在谈论的一个例子。

组件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;
}

1 个答案:

答案 0 :(得分:6)

此问题的最常见原因是该服务已注册多次。检查每个组件和模块中providers数组的内容,确保它只在 ONE 位置注册。

以下是代码段:

  providers: [
    ProductService,
    ProductGuardService
  ]

这些是@Component@NgModule元数据

的一部分