2017-06-02 10 views
-1

内のコンポーネントへのサービスからのデータasynchron私は、JSONファイルからデータasynronフェッチしている職場サービスを持っていなさい:角度2

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

} 

をしかし、私はasynchronのhttpリクエストがそうであるように、私のコンポーネントがinitilziedなると、データは私のサービスにロードされていない:私はこれをしようとしています。サービスからデータを取得するにはどうすればよいですか? コンポーネントでsubscribe()を使用したくありません。それは私のサービスを行う必要があります。

ありがとうございました。

+0

あなたのサービスではどこにgetAllWorkplaces関数がありますか? –

+0

私は自分の質問を編集しました。 –

答えて

0

サービス内のすべての職場を公開してアクセスしてみてください。 getAllWorkplaces()メソッドを実行すると、オブジェクトのスナップショットが得られ、その時点でassyncronous呼び出しが終了していない可能性があります。

+0

私はもうこれを試しましたが、これはどちらもうまくいきません。非同期呼び出しはまだ終了していません。 –

+0

件名やbehaviorSubjectを使ってみましたか? –