2016-11-15 7 views
1

Я хотел бы получить массив результатов из atom.service в atom.component. Я думал, что могу привести массив результатов в atom.component с исходными кодами ниже (не представлены целые коды). Но я обнаружил, что не смог получить доступ к this.atoms в atom.component из исходных кодов ниже. Массив результатов в 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

Подписаться на компоненты, а не на службе. Угловые 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

Наконец. Рад слышать. Извините снова за то, что вы так неряшливы. –

Смежные вопросы