如何从另一个组件中的方法返回值?

时间:2017-05-12 09:41:51

标签: angular

我有组件详情。我有这个方法:

getCantonsByCode(cantonCode: string) {    
    this.restService.getSelectedByCode("rcanton", cantonCode)
    .subscribe(results => {
        return this.canton = results["payload"];
    });
 }

在组件address.ts中我想做这样的事情:

   this.addressDetailForm.addressDetails.viewAttr2 = this.addressDetailForm.getCantonsByCode(address.cantonCode)

但我得到了不确定。任何建议如何才能返回该值?

3 个答案:

答案 0 :(得分:1)

地址组件应该像服务细节一样直接通过服务访问数据。通常,组件不应该彼此了解,尤其是不能访问数据。 通过其他组件(UI层)访问数据(服务层)毫无意义。

答案 1 :(得分:0)

您应该做的第一件事是将代码更改为以下内容:

getCantonsByCode(cantonCode: string) {    
    this.restService.getSelectedByCode("rcanton", cantonCode)
        .subscribe(results => {
        this.canton = results["payload"];
        return this.canton;
    });
}

但是,如果这不能解决您的问题,您应该确保results是否真的符合您的期望。

修改

我同意另一个答案,你不应该通过服务属性访问数据,所以我会改进我的答案。您应该执行以下操作:

getCantonsByCode(cantonCode: string) {    
    this.restService.getSelectedByCode("rcanton", cantonCode)
        .map(results => results["payload"]);
}

并订阅组件中的Observable。

答案 2 :(得分:0)

如果address.tsdetails.ts的父级,那么您可以使用@ViewChild

getCantonsByCode公开为public方法。

address.html

<details #details></details>

and address.ts

@ViewChild('details') details : DetailsComponent
 details.getCantonsByCode(address)

编辑:我误解了

您未定义的原因是您的方法正在进行异步调用。

此行不返回任何内容。

this.addressDetailForm.addressDetails.viewAttr2 = this.addressDetailForm.getCantonsByCode(address.cantonCode)

您必须将方法更改为以下内容。

getCantonsByCode(cantonCode: string) : Observable<any>{    
    return this.restService.getSelectedByCode("rcanton", cantonCode)

 }

并且只要您想要提取值,就可以订阅此方法。

getCantonsByCode(address.cantonCode).subscribe(results => {
        return this.canton = results["payload"];
    });