我的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]'
当我注释掉调度功能时,有效载荷可以成功更改,没有错误。
我不是要更改商店,因为我知道不能更改。发送邮件后,我只想更改视图中显示的数据。
分派到商店是否会更改原始对象的权限?
我该如何解决?
答案 0 :(得分:0)
动作是不可变的,NgRx具有运行时检查功能,可以在分派动作时冻结动作。 由于对象被冻结,因此出现此错误。
有关更多信息,请参阅文档,https://ngrx.io/guide/store/configuration/runtime-checks#strictactionimmutability
答案 1 :(得分:0)
在旧对象的基础上创建一个新对象解决了这个问题。