首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTTP请求角度2

HTTP请求角度2
EN

Stack Overflow用户
提问于 2016-11-04 22:47:41
回答 2查看 762关注 0票数 1

我正在尝试从angular 2中的外部API发出请求。我想在2个文件中管理数据请求,并将结果显示为json。

我的数据输出组件如下所示:

代码语言:javascript
复制
import {Component} from '@angular/core'
import {DataService} from './datavisualisation.service'

    @Component({
        selector: 'app-datavisualisation-output',
        template: ` 
      `
    })
    export class DatavisualisationOutput {
        constructor(dataservice: DataService) {
            dataservice.data
                .subscribe(
                    data => this.data = data,
                    console.error,
                    () => console.log('Look at this:' + data)
                );
        }

    }

我的第二个服务文件如下所示:

代码语言:javascript
复制
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';

@Injectable()
export class DataService {
    constructor(http:Http) {
        this.data = http.get('http;//...API')
            .map(response => response.json());
    }
}

...but控制台显示以下错误:

代码语言:javascript
复制
components/datavisualisation/dataservices/datavisualisation.output.service.ts:12:26 
Property 'data' does not exist on type 'DataService'.
components/datavisualisation/dataservices/datavisualisation.output.service.ts:14:29 
Property 'data' does not exist on type 'DatavisualisationOutput'.
components/datavisualisation/dataservices/datavisualisation.output.service.ts:16:43 Cannot find name 'data'.
components/datavisualisation/dataservices/datavisualisation.service.ts:8:13 
Property 'data' does not exist on type 'DataService'.

我在这里做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2016-11-04 22:51:19

您应该在DatavisualisationOutput组件上定义data属性:

代码语言:javascript
复制
export class DatavisualisationOutput {

    public data: any; //this one

    constructor(dataservice: DataService) {
        dataservice.data
            .subscribe(
                data => this.data = data,
                console.error,
                () => console.log('Look at this:' + data)
            );
    }

}

在你的DataService

代码语言:javascript
复制
@Injectable()
export class DataService {

    public data: any;

    constructor(http:Http) {
        this.data = http.get('http;//...API')
            .map(response => response.json());
    }
}

DatavisualisationOutput上..。只是..。始终定义使用this访问的任何属性。

票数 2
EN

Stack Overflow用户

发布于 2016-11-04 22:58:26

正如@PierreDuc已经说过的,你应该在component类中定义该变量,以便在Class上下文中可用。

此外,您还应该在服务中创建一个负责数据的方法。只需从另一个组件调用相同的方法,它就会返回上次检索到的数据。

代码

代码语言:javascript
复制
@Injectable()
export class DataService {
    data: any;
    constructor(http:Http) {
    }

    getData(){
       if(this.data) return Observable.of(this.data)
       else
          return http.get('http;//...API')
            .flatMap(response => {
               this.data = response.json();
               return Observable.of(this.data)
            );
    }
}

组件

代码语言:javascript
复制
export class DatavisualisationOutput {
    myData: any;
    constructor(private dataservice: DataService) {
        dataservice.data
            .subscribe(
                data => this.data = data,
                console.error,
                () => console.log('Look at this:' + data)
            );
    }
    ngOnInit(){
        dataservice.getData().subscribe(
          data => myData = data
        )
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40425556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档