NGXS ofActionSuccessful - PullRequest
       9

NGXS ofActionSuccessful

1 голос
/ 23 февраля 2020

У меня есть angular компонент, который подписывается на ofActionSuccessful. Это действие отправляется, когда пользователь нажимает кнопку на странице. Возможно, что пользователь может нажать на эту кнопку несколько раз, что приведет к нескольким событиям отправки для этого действия

 this.actions$.pipe(ofActionSuccessful(UpdateCommunicationPreferences)).subscribe(() => {
  console.log('Action Successful');
});

this.store.dispatch(
    new UpdateCommunicationPreferences(this.communicationPreferenceForm.value)
  );

Проблема, с которой я сталкиваюсь, связана с ofSuccessful, вызвана накопленным образом. Другими словами, в первый раз, когда пользователь нажимает кнопку, «Действие успешно» печатается один раз. Второй раз пользователь нажимает на кнопку, она печатается дважды и так далее.

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

Цените любые идеи.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Взгляните на это: https://www.ngxs.io/advanced/cancellation

Извлечено из ссылки: "Если у вас есть асинхронное действие c, вы можете отменить предыдущее Наблюдаемое, если действие был отправлен снова. Это полезно для отмены предыдущих запросов, как в случае с типом заголовка. "


В качестве альтернативы, вы можете рассмотреть шаблон, который отключает пользовательский интерфейс при нажатии кнопки (например, через" в процессе " диалог), прежде чем запускать действие рассылки. После завершения действия закройте диалоговое окно.

Надеюсь, это поможет.

0 голосов
/ 23 февраля 2020

Этот пакет был разработан с учетом вашей проблемы:

https://www.npmjs.com/package/@ngxs-labs / выполнение действий

@ Select (actionsExecuting ([UpdateCommunicationPreference])) myActionIsExecuting $ : Observable;

вы можете использовать myActionIsExecuting $ в вашем шаблоне с асин * c pipe. Вы также можете просто подписаться на myActionIsExecuting, чтобы ознакомиться с тем, что возвращается. null будет возвращен, когда все экземпляры этого конкретного действия будут завершены.

Надеюсь, это поможет!

...