2017-12-18 20 views
0

後にnullで私は角2上だとそうのようなクラスをコード化:コンポーネントでサーバーからデータを取得するために、次にメソッドはHTTP GET

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

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

しかし、コンポーネントのBooks配列のメンバーのいずれかで、関数book.incRead(3)にアクセスすることはできません。

たぶんHttpClientを取得する方法は正しくインスタンス化しないか、私はクラスのパブリックメソッドへのアクセスを得るために別の配列にマッピングする必要があります。

私はいくつかの回避策を試してみたが、コードは不必要に汚れを取得します。

親切にしてください。私は本当に宿題を終え、これほど明確な質問を見つけることができませんでした。私ができる:

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

    constructor() { 
    } 

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

} 

とサーバ(HttpClient not running constructorこのアプローチを使用して)からデータを取得するために:私はクラスを少し変更しましたし、今私はこの道を行くことができ

EDIT

オブジェクトの割り当てを使用する

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

ここでは、Httpサービスを使用してクラス内に投稿機能を追加するのに最適です。b私は新しい質問でそれを開きます。

コーディングハッピー!

ジョセップ。

+0

を? – Aravind

+0

私はHttpClient get関数によって生成された各オブジェクトに対してincReadメソッドを使用しようとしています。 httpClientがデータ(ブック配列、プロパティのみ)を取得する場合、メソッドは使用できません。 –

答えて

1

あなたが実際にブックオブジェクトを作成する必要があります。

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

あなたは「は任意の」オブジェクト取るコンストラクタを作成する必要があります。期待される動作が何であるかを

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

コンストラクタを追加するためのコードを編集し、プロパティが初期化された実際の動作に近づけました。 新しいブック(b)に、コンストラクタパラメータに関するエラーが表示されます。 –

+0

私は私の答えを編集しました – Carsten

+0

私はすぐに答えとしてマークすることはできません申し訳ありません私はそれをテストする必要があり、実際のクラスは多くのプロパティとメソッドを持っています。ただ試してみましょう! –