angular4兄弟组件交互,监听响应

发布于 2022-09-06 20:25:58 字数 157 浏览 16 评论 0

兄弟组件a和b,点击a里面的按钮请求数据后渲染图表,同时也让b里面的图表从新请求数据然后渲染, 能不能给个思路,跪求了,才接触ng4,经验不够。
我的想法是写个服务,两个组件都调用那个服务,把元数据参数放到服务里,a点击后改变元数据参数,但是b怎么监听元数据的变化做出请求数据的响应???

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

说不完的你爱 2022-09-13 20:25:58

可以创建一个service,既然是用来渲染图表的,可以叫RenderChartService.
在这个service中要有一个subject,负责用来emit消息,同时可以被用来订阅消息。

@Injectable
class RenderChartService {
  private renderSubejct: Subject<any> = new Subject<any>();

  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();
     }
}
笑看君怀她人 2022-09-13 20:25:58

@input@output也可以达到同样的效果

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文