#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(...);
});