2016-11-15 5 views
1

atom.serviceからatom.ponentに結果配列を取得したいと考えています。私は結果の配列を以下のソースコードを持つatom.componentに持ち込むことができると考えました(完全なコードは表示されません)。しかし、私は以下のソースコードからatom.componentのthis.atomsにアクセスすることができませんでした。 atom.service.tsの結果配列が正常に作成されました。 atom.componentの結果配列にアクセスする方法を知っている人は、それについていくつかの指針を与えることができますか?あなたが実行を同期するために戻って、非同期実行から取得することはできません角度2のオブジェクトにサービスからオブジェクトを戻す方法は?

atom.service.ts

getAtoms(private newConcept: string) { 
    this.http.get('api/atoms.json') 
    .map((responseData) => {return responseData.json()}) 
    .subscribe(data => { 
     let results:Array<RAtom> = []; 
     for (i = 0; i < data.result.length; i++) { 
      results.push(new RAtom(data.result[i].classType, data.result[i].ui)); 
     } 
     return results; 
    }); 
} 

atom.component.ts

atoms: Array<RAtom>; 

searchAtoms(newConcept: string) { 
    if (newConcept) { 
    this.atoms = this.service.getAtoms(newConcept); 
    } 
} 

RAtom.ts

export class RAtom { 
    classType: string; 
    ui: string; 

    constructor(classType: string, ui:string) { 
     this.classType = classType; 
     this.ui = ui; 
    } 
} 
+0

はコンポーネントではなく、サービスに購読します。 Angular 2のドキュメントにはこの例がたくさんあります。 – jonrsharpe

+0

まず、私は彼らがどう違うのか尋ねることができます、私は大雑把に理解しますが、私はそれを聞くことができますか? –

+0

あなたは何を求めようとしているのか分かりません。 – jonrsharpe

答えて

1

代わりのgetAtoms()に加入するが、その後、彼はデータが到着したときに呼び出されるコールバックを渡すことができ、呼び出し側が加入してみましょう:

getAtoms(private newConcept: string) { 
    return this.http.get('api/atoms.json') 
    .map((responseData) => {return responseData.json()}) 
    //.subscribe(data => { 
    .map(data => {  
     let results:Array<RAtom> = []; 
     for (i = 0; i < data.result.length; i++) { 
      results.push(new RAtom(data.result[i].classType, data.result[i].ui)); 
     } 
     return results; 
    }); 
} 
atoms: Array<RAtom>; 

searchAtoms(newConcept: string) { 
    if (newConcept) { 
     this.service.getAtoms(newConcept) 
     .subscribe(result => this.atoms = result; 
    } 
} 
+0

最後に。聞いてうれしい。とても申し訳ありません。 –

関連する問題