将对象发送到NgRx存储后无法重置对象

时间:2020-02-13 11:42:08

标签: angular typescript ngrx ngrx-store

我的Angular 8项目中有一个模板驱动的表单。

此表单使用NgModel来获取数据,只需单击一下按钮,该按钮就会触发将数据发送功能以及其他一些预设值发送到Action以通过电子邮件服务发送消息的功能。

对象:

  // Data for the reply
  public messageResponse = {
  transmissionRequest: {
    arrivalTime: null,
    attachments: [
      {
        contents: null,
        filename: null
      }
    ],
    ccRecipients: null,
    direction: 'OUTBOUND',
    originator: null,
    payload: null,
    recipient: null,
    subject: null,
    type: 'email'
  }
};

尝试的更改:

this.messageResponse.transmissionRequest.payload = '';

随消息分派的操作:

this.store.dispatch(new SendReply(this.messageResponse));

我已经尝试在商店分派后的一个函数中,在商店分派后的函数中,将订阅的存储有效地更改为空字符串,这是因为成功订阅了该商店的成功,该消息实际上是通过http发送的,所有这些解决方案都存在以下错误:

ERROR TypeError: Cannot assign to read only property 'payload' of object '[object Object]'

当我注释掉调度功能时,有效载荷可以成功更改,没有错误。

我不是要更改商店,因为我知道不能更改。发送邮件后,我只想更改视图中显示的数据。

分派到商店是否会更改原始对象的权限?

我该如何解决?

2 个答案:

答案 0 :(得分:0)

动作是不可变的,NgRx具有运行时检查功能,可以在分派动作时冻结动作。 由于对象被冻结,因此出现此错误。

有关更多信息,请参阅文档,https://ngrx.io/guide/store/configuration/runtime-checks#strictactionimmutability

答案 1 :(得分:0)

在旧对象的基础上创建一个新对象解决了这个问题。

相关问题