是否正在使用public data: Subject<Data> = new Subject<Data>();
public save: Subject<void> = new Subject<void>();
主题来表示某事已经发生了良好的做法?
我很好奇是否有更好的方式来发出某个事件的信号,以及我是否应该重构我的代码。
更完整的例子是:
自定义服务
public data: Data[] = [];
public ngOnInit(): void {
this.data = someApiCall;
}
public saveData(): void {
this.myService.save.next();
// do something with data after it being updated
}
private updateData(): void {
this.myService.data.subscribe(data => {
this.data = data;
});
}
组件A
@Input()
public data: Data[] = [];
public ngOnInit(): void {
this.onSave();
}
private onSave(): void {
this.myService.save.subscribe(() => {
this.myService.data.next(this.data);
});
}
组件B
Input
组件B具有来自组件A中ngOnInit
的数据的Save
。
当在组件A中单击updateData()
按钮时,组件B将侦听该事件,并将从其输入收到的数据发送回组件A.然后,组件A通过Subject
接收数据并把它放在那里。
在这种情况下我只使用Save
表示#!/bin/sh
date -u +"%Y-%m-%dT%H:%M:%SZ"
# your commands below
...
已发生,但我没有传递任何数据。
思想?
答案 0 :(得分:1)
简短的回答,没有。你可能不应该强迫在主题上调用.next()来表示一个事件。 Ben Lesh This article解释了为什么它不是Rx方式。
理想情况下,您可以从事件中构建一个Observable,并在您想要对该事件作出反应的任何地方订阅它。