Использование пустого предмета для сигнализации о событии - PullRequest
0 голосов
/ 04 мая 2018

Использование void Подлежит ли сигналу о том, что что-то произошло, хорошая практика?

Мне любопытно, есть ли лучший способ сообщить о каком-либо событии и нужно ли мне реструктурировать свой код.

Более полный пример этого:

Таможенное обслуживание

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

public save: Subject<void> = new Subject<void>();

Компонент 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;
    });
}

Компонент B

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

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

private onSave(): void {
    this.myService.save.subscribe(() => {
        this.myService.data.next(this.data);
    });
}

Компонент B имеет значение Input из данных, которые поступают из ngOnInit в Компоненте A.

Когда кнопка Save нажата в Компоненте A, Компонент B прослушивает событие и передает данные, полученные от его ввода обратно в Компонент A. Затем Компонент A получает данные через updateData() и устанавливает их там. .

В этом случае я использую только Subject, чтобы указать, что Save произошло, но я не передаю никаких данных.

Мысли

1 Ответ

0 голосов
/ 06 мая 2018

Краткий ответ, нет. Возможно, вам не следует обязательно вызывать .next () для субъекта, чтобы обозначить событие. В этой статье , написанной Беном Лешем, объясняется, почему это не так.

В идеале вы должны создать Observable из события и подписаться на него, где бы вы ни захотели отреагировать на это событие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...