使用服务在角度组件之间进行通信是否正确?
如果我有一个打开模态
的组件
this.taskService.activeTask = this.currentTask;
this.tagSelectModalRef = this.modalService.show(TagSelectorComponent, {});
像示例中那样通过服务"传递"模态必须使用的元素是否正确?
如果是并排可视化的组件,其中一个组件中的单击会影响另一个组件,那么它也是正确的吗?
谢谢,
安瑞科
是的,您可以使用服务在组件之间进行通信。它清楚地记录在组件交互部分的官方角度文档中。
我个人通过创建 2 个单独的组件完成了您过去尝试做的事情。我发现这是一个更干净的实现,假设您在该服务中所做的只是共享数据。但从技术上讲,如果您确实想走这条路,使用服务并没有错。如果您正在对独立于模态和组件的数据进行操作,并希望单独运行它们并独立于组件或模态,我会更倾向于使用服务。
使用 2 个组件的概念解释如下:
因此,您将拥有已有的组件,但将模态转换为第二个组件。
两个组件之间需要共享的任何内容都可以通过使用@Input
、@ViewChild
和@Output
来完成。基本上,您需要从顶级组件传递的任何内容都将在模态组件中使用@Input
。您需要从模态通知顶级组件的任何内容,具体取决于您尝试传递回树的内容或您希望触发的行为,您可以使用模态组件中@angular/core
导入的@Output
和EventEmitter
,也可以在顶级组件中使用@ViewChild
。
您需要使用服务在同级组件之间进行通信。如果您需要与孩子沟通或与父母沟通,请使用@input和@output