Observable的奇怪行为导致Angular / Typescript

时间:2017-11-17 14:27:55

标签: angular typescript observable

我有以下问题。想象一下Angular 2的单一服务:

validate() {
        return this.http.get('api/validate', data); }

当我尝试使用上述API时,一切正常:

this.ValidationService.validate().subscribe(result => {
            console.log('data returned from api', result);
        });

,结果是一个对象:

{status: "success", data: {…}}

但是,让我发疯的是我正在尝试的时候:

this.ValidationService.validate().subscribe(result => {
                console.log('data returned from api', result.data);
            });

Typescript抱怨没有数据属性,并且存在编译错误!同时从下面我得到true ...

this.ValidationService.validate().subscribe(result => {
            console.log('data returned from api', result.hasOwnProperty('data'));
        });

我也试过result['data']。它没有用。对可能发生的事情有任何想法?

3 个答案:

答案 0 :(得分:1)

我想你错过了.json()来获得回复的主体:

this.ValidationService.validate().subscribe(result => {
  console.log('data returned from api', result.json());
});

如果是这样我认为最好将.json()移动到您的服务中,以便代码中没有多少.json():

validate() {
  return this.http.get('api/validate', data).map(res => res.json()); 
}

答案 1 :(得分:0)

试试这个,加?防止错误:

console.log('data returned from api', result?.data);

答案 2 :(得分:0)

尝试为结果添加任意类型,如下所示:

this.ValidationService.validate().subscribe((result:any) => {

您可能还希望为回复添加正确的输入,这将使您的代码更具可读性和可维护性