在Angular 2中从服务到组件获取异步数据

Posted

技术标签:

【中文标题】在Angular 2中从服务到组件获取异步数据【英文标题】:Get asynchron data from Service to Component in Angular 2 【发布时间】:2017-11-04 05:32:56 【问题描述】:

我有一个工作场所服务,它从 json 文件中获取异步数据:

export class WorkplaceService

    private allWorkplaces:Workplace[] = new Array();

    constructor(private http: Http)
        this.readWorkplaceDataFromFile().subscribe(data => this.allWorkplaces=data, error => console.log(error));
    

    private readWorkplaceDataFromFile(): Observable<Workplace[]> 
         return this.http.get('assets/workplaces.json').map((response: Response) =>   
            return <Workplace[] > response.json()  
        ).catch(this.handleError);  
     

    public getAllWorkplaces():Workplace[] 
        return this.allWorkplaces;
    


现在我需要将这些数据放入我的 WorkplacesComponent。我正在尝试这个:

export class WorkplaceManagementComponent implements OnInit

  allWorkplaces: Workplace[] = new Array();

  constructor(private storage: ProductionProgramStorage, private workplaces: WorkplaceService) 

  

  ngOnInit() 
    this.allWorkplaces = this.workplaces.getAllWorkplaces(); 


但是当我执行异步 http 请求时,当我的组件被初始化时,数据不会加载到我的服务中。如何从我的服务中获取数据? 我不想在我的组件中使用 subscribe()。 它应该为我服务。

谢谢。

【问题讨论】:

getAllWorkplaces 函数在您的服务中的哪个位置? 我编辑了我的问题。忘记放了。 【参考方案1】:

尝试将服务中的 allWorkplaces 公开并访问它。当您执行 getAllWorkplaces() 方法时,它会提供对象的快照,此时异步调用可能尚未结束。

【讨论】:

我已经试过了,这个也不管用。异步调用仍未结束..

以上是关于在Angular 2中从服务到组件获取异步数据的主要内容,如果未能解决你的问题,请参考以下文章

Angular中从父组件到子组件的数据共享

Angular - 在另一个组件中使用 observable(在异步数据调用中获取值)

Angular 2:异步显示依赖于解析器的子组件

Angular 中的异步数据处理

如何在 Angular 的 ng 组件中从 ng-slider 获取价值

Angular框架中的父子组件通信传递异步的数据接收值异常的问题(Async Data)