使用虚拟对象发出事件信号

时间:2018-05-04 14:50:21

标签: angular rxjs

是否正在使用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 ... 已发生,但我没有传递任何数据。

思想?

1 个答案:

答案 0 :(得分:1)

简短的回答,没有。你可能不应该强迫在主题上调用.next()来表示一个事件。 Ben Lesh This article解释了为什么它不是Rx方式。

理想情况下,您可以从事件中构建一个Observable,并在您想要对该事件作出反应的任何地方订阅它。