angular - 如何在 Angular 2中将对象从服务返回到组件?

标签 angular return observable subscribe

我想将结果数组从atom.service 获取到atom.component 中。我想我可以将结果数组引入到atom.component中,并使用下面的源代码(未提供完整代码)。但我发现我无法从下面的源代码访问atom.component中的this.atoms。 atom.service.ts 中的结果数组已成功创建。如果有人知道如何访问atom.component中的结果数组,你能提供一些指导吗?

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;
    }
}

最佳答案

您无法从异步执行返回到同步执行。

不要在 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;
    }
}

关于angular - 如何在 Angular 2中将对象从服务返回到组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40617994/

相关文章:

angular - subscribe 中的 Angular 2 "this"关键字如何引用该类?

ios - NSDateFormatter 不起作用

angular - 导入 Observable rxjs/Observable 不起作用

javascript - Angular SSR 网站在转到实际路径之前重定向到登录页面

angular - 观察者函数中的异步等待

angular - 无法在代码共享项目中使用 Nativescript Localstorage 插件

css - 在 cdk-virtual-scroll-viewport Angular 之外显示绝对元素

css - 是否可以通过 Hostbinding 访问 css class::after 和::before 选择器?

C# 输出参数与返回值

java - 如何通过 asyncTask 方法解析来自 2 个不同 URL 的数据