Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NgZone试图在ngrx商店中改变承诺_Javascript_Typescript_Redux_Ngrx - Fatal编程技术网

Javascript NgZone试图在ngrx商店中改变承诺

Javascript NgZone试图在ngrx商店中改变承诺,javascript,typescript,redux,ngrx,Javascript,Typescript,Redux,Ngrx,我正在使用ngrx的Redux实现,并使用ng引导的NgbModal在我的应用程序中创建模式对话框窗口。我需要存储,这是一个对象,其中一个属性是promise,而应用程序存储区正是这样做的合适位置。但是,当我执行以下操作时: const modalRef: NgbModalRef = this.modal.open(PINModalComponent); this.store.dispatch({type: TwoFAActions.STORE_PIN_MODAL_REF, payload: m

我正在使用ngrx的Redux实现,并使用ng引导的NgbModal在我的应用程序中创建模式对话框窗口。我需要存储,这是一个对象,其中一个属性是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)
ERROR-TypeError:无法分配给对象的只读属性“#nesting”
在NgZone.onLeave(core.es5.js:4165)
位于Object.onInvokeTask(core.es5.js:4119)
在ZoneDelegate.webpackJsonp.988.ZoneDelegate.invokeTask(zone.js:366)
位于Zone.webpackJsonp.988.Zone.runTask(Zone.js:166)
在HTMLButtonElement.ZoneTask.invoke(zone.js:420)

看起来NgZone试图改变作为操作负载一部分的承诺,但无法做到这一点,因为ngrx使其存储中的对象不可变。有没有办法优雅地绕过这个问题?谢谢。

用getter函数替换了有效负载,成功了:

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