可以创建一个service,既然是用来渲染图表的,可以叫RenderChartService.
在这个service中要有一个subject,负责用来emit消息,同时可以被用来订阅消息。
@Injectable
class RenderChartService {
private renderSubejct: Subject = new Subject();
public getRenderSubject(): Observable {
return this.renderSubject;
}
public emitRenderInfo(msg: any): void {
if (msg) {
this.renderSubject.next(msg);
}
}
}
将RenderChartService注入到组件a和组件b中,
这样在组件a中,按钮的事件处理函数中就可以这样写:
onClick() {
//请求数据....
this.renderChartService.emitRenderInfo(something);
}
在组件b中来订阅RenderChartService中的subject
private renderChartSubscription: Subscription = null;
ngOnInit() {
if (!this.renderChartSubscription) {
this.renderChartSubscription
= this.renderChartService.getRenderSubject()
.subscribe((res: any) => {
});
}
}
同时记得在组件ngOnDestroy时的时候,要取消订阅组件里的所有的订阅
ngOnDestroy() {
if (this.renderChartSubscription) {
this.renderChartSubscription.unsubscribe();
}
}