【问题标题】:NgZone tries to mutate a Promise in ngrx storeNgZone 尝试在 ngrx 存储中改变 Promise
【发布时间】:2017-05-07 12:48:36
【问题描述】:

我正在使用来自 ngrx 的 Redux 实现,并使用来自 ng-bootstrap 的 NgbModal 在我的应用程序中创建模式对话框窗口。我需要存储reference to the modal window,它是一个对象,其中一个属性是一个promise,而应用程序商店是合适的地方。但是,当我执行以下操作时:

const modalRef: NgbModalRef = this.modal.open(PINModalComponent);
this.store.dispatch({type: TwoFAActions.STORE_PIN_MODAL_REF, payload: modalRef});

我明白了:

ERROR TypeError: Cannot assign to read only property '_nesting' of object '#<NgZone>'
    at NgZone.onLeave (core.es5.js:4165)
    at Object.onInvokeTask (core.es5.js:4119)
    at ZoneDelegate.webpackJsonp.988.ZoneDelegate.invokeTask (zone.js:366)
    at Zone.webpackJsonp.988.Zone.runTask (zone.js:166)
    at HTMLButtonElement.ZoneTask.invoke (zone.js:420)

看起来 NgZone 试图改变作为动作有效负载一部分的承诺,但不能这样做,因为 ngrx 使其存储中的对象不可变。任何想法如何优雅地规避这个?谢谢。

【问题讨论】:

    标签: javascript typescript redux ngrx


    【解决方案1】:

    用 getter 函数替换了有效负载并做到了:

    const modalRef: NgbModalRef = this.modal.open(PINModalComponent);
    this.store.dispatch({type: TwoFAActions.STORE_PIN_MODAL_REF, payload: () => modalRef});
    

    【讨论】:

      猜你喜欢
      • 2022-04-30
      • 1970-01-01
      • 2021-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      相关资源
      最近更新 更多