4

Ich kann den Fehler nicht verstehen, den ich auf meiner Client-Anwendung erhalte. Ich abonniere ein graphql-Abonnement und bin in der Lage, die Aktualisierungen abzurufen, aber ich kann die Änderungen nicht an das Typoskript-Array "models: ModelClass []" weitergeben, das an die Ansicht gebunden ist.Uncaught TypeError: Eigenschaft 12 kann nicht hinzugefügt werden, Objekt ist nicht erweiterbar

Gibt es etwas, das ich vermisse oder falsch mache?

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); 
}); 

Modell-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

Übrigens fand ich beide Objekte nicht kompatibel! – micronyks

+0

Was ist die Art von 'Modellen'? – micronyks

+0

Modelle: ModelClass [] – cyberbeast

Antwort

0

ich this.models nehme an ein Array von Apollo zurückgegeben und Sie wollen neu erstellt hinzufügen Objekt zu Ihrem ursprünglichen Array? Wenn das stimmt, gibt Apollo ein unveränderliches Objekt zurück!

Sie müssen das initial zurückgegebene Array klonen. So etwas wie in der Funktion abonnieren:

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 
      } 
     }) 
    }; 
}); 

Dann wird Ihre Abonnement-Anfrage in der Lage, ein erstelltes Modell zu dieser Ebene JavaScript-Array hinzuzufügen.

PS: Nicht sicher, aber ich nehme an, dass Apollo unveränderliche Objekte zurückgibt, weil sie im Laden gespeichert sind und abhängig von Ihrer Abrufrichtlinie, können Sie Treffer übersehen, wenn Sie sie mutieren können.

Hoffe es hilft

Verwandte Themen