如何检测Angular2中的变量变化
How to detect variable change in Angular2
我在构造函数 运行 之前设置了以下配置对象:
config: Object = {
onSlideChangeEnd : function(slide:any) {
this.currentSlideIndex = slide.activeIndex;
}
};
我想通知服务有关更改,问题是设置配置时该服务尚不可用:
constructor(private user: UserService,
private layout: LayoutService) {
}
如何通知服务这个变量变化?
好吧,按照建议使用 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;
})
}
在 parent-child 交互中使用上述代码工作 plunker:
Plunker
关于您对 @Input()
的评论,它在 parent component-child 交互时效果很好,因此在这种情况下对您来说并不适用。
我在构造函数 运行 之前设置了以下配置对象:
config: Object = {
onSlideChangeEnd : function(slide:any) {
this.currentSlideIndex = slide.activeIndex;
}
};
我想通知服务有关更改,问题是设置配置时该服务尚不可用:
constructor(private user: UserService,
private layout: LayoutService) {
}
如何通知服务这个变量变化?
好吧,按照建议使用 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;
})
}
在 parent-child 交互中使用上述代码工作 plunker:
Plunker
关于您对 @Input()
的评论,它在 parent component-child 交互时效果很好,因此在这种情况下对您来说并不适用。