Попытка закрыть панель закусок материала после вызова в действии NGXS не работает

#angular #angular-material #snackbar #ngxs

#angular #angular-material #панель закусок #ngxs

Вопрос:

После того, как я вызываю панель закусок из действия NGXS, панель закусок не закрывается. Только после указанных миллисекунд, но не после закрытия «действия»

Я попытался закрыть его, используя параметр ‘action’ и метод ‘ref.close()’, оба не сработали.

Но если я вызываю его обычно из компонента без использования действий NGXS, он закрывается, как и предполагалось.

Действие NGXS

нажатие кнопки «Закрыть» не работает. Он остается открытым.

Однако, если я нажму кнопку закрыть, а затем щелкну где-нибудь еще, это не кнопка, она сразу закрывается

 @Action(SomeAction)
  someAction(
    { setState, getState }: StateContext<SomeModel>,
    { payload }: SomeAction
  ) {
    ...
      if (payload.data.amount < 1000) {
         ...
      } else {
        this.snackbar.open('Error', 'Close', {
          duration: 4000
         });
        return;
      }
 

Обычный вызов из компонента

нажатие кнопки «Закрыть» работает так, как задумано

   test() {
    this.snackbar.open('test', 'Close', {
      duration: 4000
    });
 

Ответ №1:

Столкнувшись с этим раньше — просто подпишитесь на отправку (которая возвращается, когда отправка обновила состояние), а затем выполните панель закусок.

Ответ №2:

NGXS запускает что-то за пределами NgZone. Чтобы исправить это:

 constructor(
  private readonly snackBar: MatSnackBar,
  private zone: NgZone,
) { }

this.zone.run(() => {
  this.snackBar.open(...);
});