Angular 4 - 无法添加/删除密封的数组元素

时间:2017-07-16 14:21:24

标签: angular typescript

您好我在尝试将元素插入数组时遇到以下错误:

  

无法添加/删除密封的数组元素

我使用apollo-angular(GraphQL客户端)获取数据。数据恢复得很好。

这是我的代码: main.html中:

<div class="chats">
    <chat *ngFor="let chat of activeChats; let i = index" [chat]="activeChats[i]" (close)="removeChat(i)"></chat>
</div>

聊天组件:

@Component({
  selector: 'chat',
  templateUrl: './chat.component.html'
})
export class ChatComponent {

  @Input() chat : Chat

  constructor(
      private chatService : ChatService
  ) {}

  getNextPage(){
    this.chatService.getMessages(this.chat.id, this.chat.messages[0].sentTime).subscribe(msgs=>{
       // The error thrown here
       this.chat.messages.splice(0,0,...(msgs || []));
    })
  }
}

聊天数据样本结构:

{
  id : "234234234",
  messages : [
     {id:"2341112", sentTime:"2017-07-05T17:14:07.396Z"},
     {id:"2341342", sentTime:"2017-06-05T17:14:07.396Z"}
  ]
}

2 个答案:

答案 0 :(得分:2)

收到回复时,在您的服务中:

代替:

this.messages = result.data.nodes;

使用:

this.messages = [...result.data.nodes];

答案 1 :(得分:2)

问题在于apollo-client软件包,我用它来与我的GraphQL服务器通信并获取数据。

似乎apollo-client会自动深度冻结所有服务器响应。 我在他们的github回购中打开了一个相关问题: https://github.com/apollographql/apollo-client/issues/1909