2017-03-05 3 views
0

Ich versuche ein Projekt in angular2 und Typoskript, und ich habe einige unerklärliche Probleme. Aus irgendeinem Grund kann ich keine Daten einer Klasseneigenschaft zuweisen.angular2 typescript kann dieser Eigenschaft nicht zuweisen.

Ich habe ein Paar von Klasseneigenschaften wie folgt definiert:

public loadResultMessages: string[]; 
public book: Book; 

Ich habe eine Methode, wo ich einen Dienst wie dieser Aufruf:

getBookByCode() { 

    this.http.get('/api/book/loadbycode?code=' + this.bookCode) 
     .subscribe(result => { 

      var object = result.json(); 

      console.log(object); 

      this.loadResultMessages = object.loadResultMessages; 
      this.book = object.book; 

    }); 
} 

ich vergewissert haben, dass ich erhalte Daten zurück in das Objekt, aber auch nach dem Versuch, Daten den beiden Eigenschaften zuzuordnen, sagen sie undefined. Wie kann das sein?

EDIT: Okay, ich bin mit Visual Studio 2017 rum und setze Haltepunkte in meinem JavaScript. Ich wühlte über die Variablen und es sagte mir, dass sie undefiniert waren. Wenn ich sie jedoch an der Konsole auslogge, werden sie ausgefüllt. Andere Variablen kann ich Maus über und sie zeigen die Ergebnisse. Ich bin mir nicht sicher, ob dies eine Art von Timing-Problem oder ein Fehler in VS ist?

Ich denke, ich leide auch einige wichtige Caching-Probleme. Wenn ich die zusätzlichen console.log() -Aufrufe einsetze, hat mein Code plötzlich funktioniert.

+1

Sie sie abonnieren können Sie das Ergebnis 'console.log (Objekt) hinzufügen;' hier? Wenn es '[Object object]' ist, versuche 'console.log (JSON.stringify (object))' und füge es deiner Frage hinzu? –

+1

Wenn Sie Fehler in .html bekommen, versuchen Sie, Buch zu instanziieren: Buch = neues Buch (...) – Habeeb

+0

Ich denke, wir brauchen mehr Informationen, Fehler, console.logs, etc ... – Amit

Antwort

0

Meistens sollte Ihr Dienst ein Observable eines Objekts oder Arrays von Objekten zurückgeben.

getBookByCode(bookCode) : Observable<any[]> { 

    return this.http.get('/api/book/loadbycode?code=' + bookCode) 
        .map((response: Response) => <any[]>response.json()) 
        .do(data => console.log("data we got is " + JSON.stringify(data))) 
        .catch(this.handleError); 
    }); 
} 

In Ihrer Komponente sollten Sie in Ihrem Konstruktor als

constructor(private serviceObject:ServiceName){ 
    this.serviceObject.getBookByCode(this.bookCode) 
        .subscribe(results => this.results = results, 
        error =>console.log(error); 
    } 
} 
+0

War diese Antworthilfe voll? – Aravind

+0

Ich könnte noch ein bisschen Hilfe gebrauchen. Ich möchte tatsächlich ein Array von Büchern in einer Service-Eigenschaft zwischen den verschiedenen Komponenten zwischenspeichern, und ich kann nicht genau herausfinden, wie man die Syntax anpasst. Ich würde dann gerne das Array nur dann auffüllen, wenn es nicht bereits bestückt ist. Ist das sinnvoll? –

+0

habe ich teilweise verstanden. Aber brauche mehr Informationen erreichen mich in fb @ aravind2109 – Aravind

Verwandte Themen