我有组件详情。我有这个方法:
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)
但我得到了不确定。任何建议如何才能返回该值?
答案 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.ts
是details.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"];
});