2017-12-18 4 views
0

ich auf Angular bin 2 und codiert eine Klasse wie so:Methoden in Winkel Typoskript Klasse sind null nach http bekommen

export class Book{ 
    title: string; 
    author: string; 
    read: integer; 
    private: _author; 

    constructor(author: string) { 
     this._author = author 
    } 

    public incRead(times: integer){ 
     this.read = this.read + times; 
    } 
} 

Dann werden die Daten vom Server an einer Komponente zu erhalten:

this._httpClient.Get<Book[]>(url).subscribe(
    (books: Book[]) => { 
     this.books = books; 
    } 
) 

Aber ich kann auf die Funktion book.incRead (3) in keinem der Mitglieder des Books-Arrays in der Komponente zugreifen.

Vielleicht HttpClient Get Methode instanziiert nicht korrekt oder ich muss zu einem anderen Array zuordnen, um Zugriff auf die öffentliche Methode in der Klasse zu erhalten.

Ich habe einige Workaround versucht, aber Code wird unnötigerweise Schmutz.

Bitte seien Sie nett. Ich habe wirklich meine Hausaufgaben gemacht und konnte keine so klare Frage finden.

EDIT

Ich habe die Klasse ein bisschen verändert und jetzt kann ich diesen Weg gehen:

export class Book{ 
    title: string; 
    author: string; 
    read: integer; 
    author: string; 

    constructor() { 
    } 

    public incRead(times: integer){ 
     this.read = this.read + times; 
    } 

} 

und Daten von dem Server zu erhalten (mit diesem Ansatz: HttpClient not running constructor) Ich kann verwenden Objekt

this._httpClient.Get<Book[]>(url).subscribe(
    (books: Book[]) => { 
     const tempbooks = new Array<Book>(); 
     books.forEach(book => { 
      tempbooks.push(Object.assign(new Book(),book); 
     } 
    } 
) 
zuweisen

Jetzt wäre es perfekt Hinzufügen einer Post-Funktion in der Klasse des HTTP-Dienst verwenden, b Aber ich öffne es in einer neuen Frage.

Glückliche Codierung!

Josep.

+0

was ist das erwartete Verhalten? – Aravind

+0

Ich versuche, die Methode incRead für jedes Objekt zu verwenden, das von der HttpClient get-Funktion generiert wird. Wenn httpClient die Daten abruft (Buch-Array, nur Eigenschaften), ist die Methode nicht verfügbar. –

Antwort

1

Sie haben tatsächlich Buchobjekte machen:

this._httpClient.Get<Book[]>(url).subscribe(
    (books: Book[]) => { 
     this.books = books.map((b) => new Book(b)); 
    } 
) 

Sie haben einen Konstruktor zu erstellen, die ein ‚any‘ Objekt nimmt:

constructor(book?: any) { 
    if (book != null) { 
    this.title = book.title; 
    this.author = book.author; 
    this.read = book.read; 
    } 
} 
+0

Ich habe den Code bearbeitet, um den Konstruktor hinzuzufügen - und näher an das tatsächliche Verhalten heranzukommen -, wo eine Eigenschaft initialisiert wird. Nun zeigt das neue Buch (b) einen Fehler bezüglich der Konstruktorparameter. –

+0

Ich habe meine Antwort bearbeitet – Carsten

+0

Es tut mir leid, ich kann nicht sofort als beantwortet markieren. Ich muss es testen, und die echte Klasse hat viele Eigenschaften und Methoden. Lass mich es versuchen! –

Verwandte Themen