如何检测Angular2中的变量

时间:2017-01-28 22:37:49

标签: angular angular2-services

我有以下配置对象,它在构造函数运行之前设置:

config: Object = {
     onSlideChangeEnd : function(slide:any) {
          this.currentSlideIndex = slide.activeIndex;
     }
};

我想通知服务有关更改,问题是在设置配置后服务还不可用:

 constructor(private user: UserService,
             private layout: LayoutService) {
 }

如何通过此变量更改通知服务?

1 个答案:

答案 0 :(得分:31)

嗯,正如建议使用Observables,这不是一个非常大的麻烦,而且效果很好。实际上它不过几行。

在某些公共服务中声明它们共享的服务,例如在该模块中声明为提供者的服务,这样您就不会得到同一服务的两个实例。向该服务添加Subject和发出值的方法:

public configObservable = new Subject<number>();

emitConfig(val) {
  this.configObservable.next(val);
}

在组件中,您需要设置配置:

emit(val) { // your value you want to emit
  this.myService.emitConfig(val);
}

然后订阅您需要的值:

constructor(private myService: MyService) {
  this.myService.configObservable.subscribe(value => {
    this.value = value;
  })
}

在亲子互动中使用上述代码运行plunker:

Plunker

关于@Input()的评论,在父组件 - 子级互动时效果很好,因此在这种情况下,这对您不起作用。