Angular 5 httpClient。について質問があります。
これは、サーバーから受け取りたいメソッドfoo()を持つモデルクラスです
export class MyClass implements Deserializable{
id: number;
title: string;
deserialize(input: any) {
Object.assign(this, input);
return this;
}
foo(): string {
// return "some string conversion" with this.title
}
}
これはそれを要求する私のサービスです:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { MyClass } from './MyClass';
@Injectable({
providedIn: 'root',
})
export class MyClassService {
constructor(private http: HttpClient) {
}
getMyStuff(): Observable<MyClass[]> {
// this is where I hope to convert the json to instances of MyClass
return this.http.get<MyClass[]>('api/stuff')
}
}
サービスにMyClass
のインスタンスを要求すると、データを取得しますが、テンプレートで{{ item.foo() }}
を実行できません。また、サービスで受け取られるアイテムのconsole.log()
typeof
の場合、I 参照しないMyClass
のオブジェクトのインスタンス。
私は何を間違えていますか?this.http.get<MyClass[]>('api/stuff')
と書くと変換が行われると思いました。
ヒントはありますか?前もって感謝します!
その際、TypeScriptは「型の表明」のみを行います。これは、オブジェクトがMyClass
型であることをTypeScriptに伝えているが、実行時にオブジェクトが実際にMyClass
のインスタンスではないことを意味します。モデルオブジェクトで定義された関数を呼び出すには、モデルクラスでコンストラクターを次のように定義する必要があります。
constructor(obj?: any) {
Object.assign(this, obj);
}
次に、サービスに次のようなマッピングを追加します。
http.get<MyClass>('/my-class').pipe(
map(res => new MyClass(res))
注:上記のコードはRxJS 6スタイルです。使用しているバージョンがわかりません