Angular 2 / TypeScript:如何访问组件中的observable属性

时间:2016-10-13 13:20:42

标签: angular typescript observable

我有一个可观察到的人像这样:

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

我可以使用Elvis运算符在我的HTML标记中访问它的属性,如下所示:

{{_myData?.PropertyNameHere}}

但是如何使用TypeScript访问组件中的相同属性?

这会在属性下产生一条波浪形的红线:

this._myData.PropertyNameHere

并说:

  

Observable

上不存在属性

更新: 服务电话的例子

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

}

1 个答案:

答案 0 :(得分:1)

该类中的

_myData不应为Observable类型。它应该是您从服务中的map运算符返回的对象的类型。

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

无论data.Items类型是什么,都应该是_myData的类型。如果您不知道该类型是什么,那么只需将其any。然后你可以做任何事情而无需编译器警告。但是如果您知道数据的结构,最好为它创建一个模型类,以便您获得强大的输入

interface SomeModel {
  somProperty: string;
}

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

  return this._http
             ...
             .map((response: Response) => <SomeModel>)response.json().data.Items);
}

您的组件

class MyComponent {
  private _myData: SomeModel;

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