2

私のアプリでは、List.json を使用してリスト (アプリのコア) を構築する必要があります。このリストをすべてのコンポーネントで共有するために、サービスを作成することにしました。

このサービスでは、コンストラクターで json ファイルを呼び出し、getter を使用して他のコンポーネントでこのリストを取得します。しかし、ゲッターを呼び出すと、コンストラクターは終了していません (http get は少し遅いです)、何も返されません.. (少しタイムアウトすると、すべて正常に動作しますが、汚れています)

コンストラクターが終了したらゲッターを呼び出すことは可能ですか?

前もって感謝します !

私のサービス:

import {Injectable} from "angular2/core";
import {Http, Response, HTTP_PROVIDERS} from 'angular2/http';

@Injectable()
export class listService {
    private list;


    constructor(http: Http) {
        http.get('app/List.json')
            .map(res => res.json())
            .subscribe(
              data => this.list = data 
            );
    }


    getValue(){
        return this.list;
    }
}

リストを表示する私のコンポーネント:

import {listService} from './listService';
import {Component} from 'angular2/core';
import {RouteConfig, ROUTER_DIRECTIVES, Router} from 'angular2/router';
import 'rxjs/add/operator/map';

@Component({
  selector: 'list',
  template: `
    <h2>Formations </h2>
    <ul><li (click)='showItem(item)'  *ngFor="#item of list"><span >{{item.Method}}</span></li></ul>
`,
  directives: [ROUTER_DIRECTIVES]
})
export class List {
  public list: Object[];
  constructor(private listService:listService, private _router: Router) {
      this.list = this.listService.getValue();
  }
  showItem(item){
    this._router.navigate( ['Item', { id: item.id }] );
  }  
}
4

3 に答える 3

1
constructor(private http: Http) {
}     
getValue(){
        return this.http.get('app/LSD.json')
            .map(res => res.json());
}

export class List {
  public list: Object[];
  constructor(private listService:listService, private _router: Router) {
       this.listService.getValue().subscribe(
              data => this.list = data 
            );
  }

}
于 2016-03-31T12:13:57.227 に答える