angular - 通过单个调用在两个组件之间进行通信
问题描述
我陷入了一个基本场景,其中我有一个组件 ( component1
),当我在该组件上执行某个操作时,我想从另一个组件获取一些数据(准确地说,我正在从 ( component2
) 发送一些内容。
现在,我正在使用通过公共服务共享的两个主题来做这件事,首先我从订阅的 component1 广播一些数据component2
,根据这些数据执行一些操作,并且 componet2 向我发送我订阅的响应在component1
. 有关详细信息,请参阅上面的快照,如上所述,这两个组件彼此不相关。
我想要实现的是有一个单一的呼叫component1
,当我在will call中执行操作时component2
,我会得到响应,请提供一些建议和方向来研究。
请求的代码
组件1.ts
click(data) {
subject1.next(data);
subject2.subscribe(s => {
alert(s);
});
}
组件2.ts
subject1.subscribe(s => {
subject2.next(s+10);
});
解决方案
您的两个组件都可以从app.component.ts
不是吗?(或包含它们的任何其他父组件)
以下方法是覆盖您的用例的更自然的方式,您当前使用服务的方式对我来说似乎是一种反模式。
组件1.ts
@Output()
public dataReady = new EventEmitter<any>();
click(data) {
dataReady.emit(data);
}
finalData(data) {
console.log('Data has been processed by component2, result:', data);
}
组件2.ts
@Output()
public dataProcessed = new EventEmitter<any>();
processData(data) {
// Do whatever you do in component 2 with data: s + 10?
dataProcessed.emit(data);
}
在组件的容器中:
<app-component1 #component1 (dataReady)="component2.processData($event)"></app-component1>
<app-component2 #component2 (dataProcessed)="component1.finalData($event)"></app-component2>
但是,如果您的两个组件都“太远”以至于您无法互相调用事件,我认为正确的方法是在您的服务中处理数据而不管您的 component2(通过从 component2 移动“processData”代码为您服务)
推荐阅读
- algorithm - Fischer 的互斥算法
- reactjs - 如何在测试 ReactJS 应用程序时使用浅酶修复错误
- c - 各种 C 数据类型的“溢出”断言:根据 C 标准,哪些断言是正确的?
- python - 如何修复数据框以使其具有多行?
- sql - F# - 为什么 FSharp.Data.SqlClient 不支持视图?
- entity-framework - Linq 连接和三元查询
- c# - 关于与字典交互的方式的问题
- java - 仅将一列作为外键存储在另一个实体中
- kubernetes - 在 NetworkPolicy yaml 规范中混淆 Kubernetes 语义
- tensorflow - Tensorflow Graph - 检查节点是否依赖占位符