2016-10-13 17 views
2

で観察可能なプロパティにアクセスするためにどのように私はこのように読み込まれますように観察を持っている:私はこのようなエルビス演算子を使用して、私のHTMLマークアップでそれをプロパティにアクセスすることができます 角度2 /活字体:コンポーネント

this._mySubscription = this._myService.getSomething(id) 
           .subscribe(
            response => this._myData = response, 
            error => this.displayError(<any>error), 
            () => this.stopLoading() 
           ); 

{{_myData?.PropertyNameHere}} 

しかし、TypeScriptを使用してコンポーネントの同じプロパティにアクセスするにはどうすればよいですか?

これはプロパティの下に波線の赤い線生成:

this._myData.PropertyNameHere 

をと言う:

プロパティが観測

更新に存在しません:サービスの 例

getSomething(id: string): Observable<any> { 

let params = 'id=' + id; 

return this._http 
      .post(apiUrl + 'SomeController/SomeAction', params, {withCredentials: true, headers: this.headers}) 
      .timeoutWith(maxTimeHttpCalls, Observable.defer(() => Observable.throw(this._feedbackService.timeout()))) 
      .map((response: Response) => response.json().data.Items); 

} 
+0

あなたは 'getSomething'方法を表示することができます

interface SomeModel { somProperty: string; } getSomething(id: string): Observable<SomeModel> { return this._http ... .map((response: Response) => <SomeModel>)response.json().data.Items); } 

を強い型付けますので、そのためのモデルクラスを作成するのが最善ですか? –

+0

私は質問を更新しました。 –

+0

最初にタイムアウトでObservableを投げていないのであれば、戻り値のタイプをObservableとして解釈しているのでしょうか。 'timeoutWith'を使わずに試してみるといいですか?レスポンスをマップするだけですか? –

答えて

1

_myDataは、タイプがObservableであってはなりません。それはあなたのサービスのmapオペレータから返されているオブジェクトのタイプでなければなりません。 data.Items_myDataのタイプのものでなければならないこと、であるどのようなタイプ

.map((response: Response) => response.json().data.Items) 

。タイプが何であるかわからない場合は、それをanyにしてください。その後、コンパイラの警告なしに何でもできます。あなたはデータの構造を知っていればしかし、それはあなたがあなたのコンポーネント

class MyComponent { 
    private _myData: SomeModel; 

    this._mySubscription = this._myService.getSomething(id) 
    .subscribe((response: SomeModel) => this._myData = response, 
       error => this.displayError(<any>error), 
       () => this.stopLoading()); 
}