使用 void 主题来发出事件信号

Use*_*842 4 rxjs angular

正在使用一个void主题来表示某件事已经发生是一个好的做法吗?

我很好奇是否有更好的方法来发出某些事件信号以及我是否应该重组我的代码。

一个更完整的例子是:

客户服务

public data: Subject<Data> = new Subject<Data>();

public save: Subject<void> = new Subject<void>();
Run Code Online (Sandbox Code Playgroud)

A组份

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;
    });
}
Run Code Online (Sandbox Code Playgroud)

B组份

@Input()
public data: Data[] = [];

public ngOnInit(): void {
    this.onSave();
}

private onSave(): void {
    this.myService.save.subscribe(() => {
        this.myService.data.next(this.data);
    });
}
Run Code Online (Sandbox Code Playgroud)

组件 B 具有Input来自ngOnInit组件 A的数据。

Save在组件 A 中单击按钮时,组件 B 监听该事件并将从其输入接收到的数据发送回组件 A。然后组件 A 接收数据updateData()并将其设置在那里。

在这种情况下,我仅使用 aSubject来表示已Save发生的情况,但我没有传递任何数据。

想法?

zha*_*ark 5

简短的回答,不。您可能不应该\xe2\x80\x99t 在主题上强制调用 .next() 来表示事件。Ben Lesh 的这篇文章解释了为什么它\xe2\x80\x99 不是 Rx 方式。

\n\n

理想情况下,您\xe2\x80\x99d 从事件构造一个 Observable 并在您想要对该事件做出反应的任何地方订阅它。

\n