在NGXS操作中被调用后尝试关闭物料小吃栏不起作用

时间:2019-04-13 17:29:05

标签: angular angular-material snackbar 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
    });

2 个答案:

答案 0 :(得分:0)

以前曾经遇到过-只需订阅调度(调度更新状态后返回),然后做小吃吧。

答案 1 :(得分:0)

NGXS 在 NgZone 之外运行。要解决此问题:

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

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