2017-03-18 6 views
0

私はNG2のサブスクライブアレイに戻っても問題はほとんどありません。Typescript Subscribe method return

私はtypescriptで初心者です。関数とコンストラクタの間でvarsをどのように転送するのか理解できません。

私のコードは次のようになります。

export class RosterPage extends Page { 

    roster:Roster[]; 
    players:Players[]; 


    roster_data:any; 

    constructor(private location: Location, private playersService: PlayersService) { 
     super(location); 

     this.players = []; 
     this.roster = []; 


     this.roster_data = this.getRoster(); 

     for (let i of this.roster_data) { 
      console.log(i); // I need iterate 


    getRoster() { 
     return this.playersService.getRoster("2017","MUZ").subscribe(roster => { 
      this.roster = roster["soupiska"]; 
     }); 
    } 


} 
+4

可能な重複http://stackoverflow.com/questions/14220321/how-do-i-return-非同期呼び出しからの応答) – echonax

答えて

0

あなたはgetRoster()機能であなたのロジックを行う必要があります。

export class RosterPage extends Page { 

roster:Roster[]; 
players:Players[]; 


roster_data:any; 

constructor(private location: Location, private playersService: PlayersService) { 
    super(location); 

    this.players = []; 
    this.roster = []; 


    this.roster_data = this.getRoster(); 

    getRoster() { 
     return this.playersService.getRoster("2017","MUZ").subscribe(roster => { 
      this.roster = roster["soupiska"]; 
      for (let i of this.roster) console.log(i); // I need iterate 
     }); 
} 
+0

私は動作しません。配列を保存してすべての関数に渡って使用する必要があります。 –

+0

'this.roster_data'または' this.roster'に保存してください。コンストラクターでは、まだAPIからの応答を得ていないため、価値がありません。 –

0

How do I return the response from an asynchronous call?から読んでください。これは、サーバーからデータを取得または取得するような非同期呼び出しを処理する方法に関する基本的な質問に答えるものです。

  • OnInitを実装し、コンストラクタではなくロードするときに実行するデータアクセスを移動する必要があります。
  • 私は余分な部分を削除し、問題に何も追加しませんでした。これは、実際に起こっていることをより明確に説明します。

コード

// import OnInit 
import {OnInit} from '@angular/core'; 


// implement OnInit 
export class RosterPage extends Page implements OnInit { 

    roster:Roster[] = []; 

    constructor(private location: Location, private playersService: PlayersService) { 
     super(location); 
    } 

    // start any async/server calls from ngOnInit, NOT the constructor 
    ngOnInit() { 
     this.loadRoster(); 
    } 

    // loads data from the service 
    loadRoster() { 
     // starts an async call to the service to get the rosters 
     this.playersService.getRoster("2017","MUZ").subscribe(roster => { 
      // once the call completes you have access to the data 
      // this is a callback 
      // you now have access to the data 
      // copy what you need to your component/page (whatever it is) using this.xxxx 
      this.roster = roster["soupiska"]; 
     }); 
    } 
} 
[私は非同期呼び出しからの応答を返すにはどうしますか?](の
+0

@ b4rtt - 結果はあなた次第ですが、誰もあなたのビジネスロジックを知っているのではなく、あなたがそのコードや結果として得られるデータコントラクトを投稿していないからです。私はあなたが持っているものに更新しました。基本的にその割り当てに入り、必要なものをローカルの 'roster'変数からあなたのコンポーネントに割り当てます。 – Igor

+0

ありがとうございました。私は私のサービスの論理を追加しました。あなたのコードはまだ動作しないので。 –