4

我似乎无法理解我在客户端应用程序上遇到的错误。我正在订阅一个graphql订阅,我能够检索更新,但是我无法将更改推送到绑定到视图的名为“models:ModelClass []”的打字稿数组中。Uncaught TypeError:无法添加属性12,对象不可扩展

有什么我失踪或做错了吗?

models.component.ts

this.apollo.subscribe({ 
    query: gql` 
    subscription { 
     newModelCreated{ 
     _id 
     name 
     type 
     train_status 
     deploy_status 
     data_path 
     description 
     created_at 
     updated_at 
     } 
    } 
    ` 
}).subscribe((data) => { 
    console.log("CREATED: " + JSON.stringify(data.newModelCreated)); 
    console.log(data.newModelCreated); 
    var temp:ModelClass = data.newModelCreated; 
    this.models.push(temp); 
}); 

模型class.ts

export interface ModelClass { 
    _id: string; 
    name: string; 
    type: string; 
    parameters: { 
     alpha: number; 
    }; 
    train_status: string; 
    deploy_status: string; 
    test_accuracy: string; 
    created_at: number; 
    updated_at: number; 
} 
+0

通过我发现这两个对象是不兼容的方式! – micronyks

+0

'models'的类型是什么? – micronyks

+0

models:ModelClass [] – cyberbeast

回答

0

我想this.models是由阿波罗返回数组,您要添加新创建对象到你的初始数组?如果属实,Apollo会返回一个不可变的对象!

您必须复制初始返回的数组。类似的订阅功能:

this.apollo 
    .watchQuery({query: INITIAL_GQL_REQUEST}) 
    .subscribe((data) => { 
     this.models = data.models.map((model) => { 
      return { 
       id: model.id, 
       name: model.name, 
       another: model.another 
      } 
     }) 
    }; 
}); 

那么你的订阅请求将能够创建的模型添加到这个普通的JavaScript数组。

PS:不确定,但我想Apollo会返回不可变的对象,因为它们存储在商店中,并且取决于您的获取策略,如果您能够改变它们,它可能会错过商店命中。

希望它可以帮助

相关问题