[英]Angular: message-passing between components
我有一个处理 WebSocket 的组件 A。 并且我也有多个用于演示的组件(例如 B)。 当 WebSocket 收到特定消息时,我需要在特定组件中执行操作(例如重新加载数据)。
我这样做的方式是在 A 中有一个主题。这将传递给 B。当 A 中的 WebSocket 收到一条消息时,我调用“next”来触发 B。
组件.ts
subj : Subject <string> = new Subject <string> ();
connectWebsocket ()
{
let sjs = new SockJS ("http://localhost:8090/ep");
this.sc = Stomp.over (sjs);
this.sc.connect ({}, (frame) =>
{
this.sc.subscribe ("/broker/webclient", (event) =>
{
if (event.body == "RELOAD")
{
this.subj.next ("RELOAD"); // trigger B to reload
}
});
}
}
B.component.ts
@Input () subj : Subject <string>;
ngOnInit ()
{
this.subj.subscribe
(
(msg) =>
{
// reload data if msg == "RELOAD"
}
);
}
它运作良好。 但我不确定这样做是否是常见的策略,或者是否有更好的方法(例如在 A 中重新加载并仅将数据传递给 B - 或使用其他机制)?
我认为您的方法在 Angular 中不是“惯用的”。
通常认为最佳实践如下:
在你的情况下,服务应该有可能是这样的:
next
的私人主题asObservable()
方法 B.component.ts
将通过依赖注入接收服务,并订阅服务公开的公共 Observable。
这个想法在这篇文章中有详细描述。 即使文章展示了 React 中的示例,Service 和 Component 的概念也可以与 Angular 的概念一一对应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.