我有一个与API通讯的组件。我想根据输入变量(例如)从API系统调用方法。我想在输入“语言”时调用该方法以获取所有语言。我的问题是当我调用API时,将变量映射到函数的对象用作API的“ get”方法的上下文。
为说明起见,首先,这是地图对象:
getMap = {
'modes': this.dropdownService.getInputModes,
'regions': this.dropdownService.getRegions,
'languages': this.dropdownService.getLanguages
};
然后,此方法来自组件。它使用输入值dropdownName,从映射中获取适当的方法,并使用params作为API调用的参数来调用该方法。
populateDropdown(dropdownName : string, params: string ) : void
{
var values: string[];
var func = () =>
{
return this.getMap[dropdownName](params).subscribe(
values => this[dropdownName] = values,
error => this.errorMessage = <any>error
);
}
func();
}
这是API调用之一:
getInputModes(otherDropdowns?: string): Observable<string[]>
{
var func = () => {
return this.http.get<string[]>(this.httpUrl3,
{ params: new HttpParams().set('otherdropdowns', otherDropdowns)}).pipe(
tap(data => console.log('All: ' + JSON.stringify(data))),
catchError(this.handleError)
);
}
return func();
}
在此API方法中,它不是引用DropDownService的“ this”,而是引用getMap对象。当然,我的对象没有'get'方法,因此会引发错误。我尝试使用粗箭头功能保留'this'的值,但目前为止无法正常工作。如您所见,我在组件端和服务端都尝试过。
有人知道为什么上下文会更改以及如何解决吗?