Angular 7将对象作为上下文传递给回调函数

时间:2019-07-17 16:09:28

标签: angular typescript

我有一个与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'的值,但目前为止无法正常工作。如您所见,我在组件端和服务端都尝试过。

有人知道为什么上下文会更改以及如何解决吗?

0 个答案:

没有答案