【问题标题】:How to send a function as parameter in angular如何以角度发送函数作为参数
【发布时间】:2019-06-03 22:41:18
【问题描述】:

我想发送一个函数作为参数。当我在另一个函数“this”和“HttpClient”等其他函数中调用它时,“urlBase”是未定义的。

我在互联网上搜索并找到了有关 bind() 属性的信息,但是如果现在定义了“this”,那么其他的仍然是未定义的。所以我把我需要的所有属性都放在了 bind() 函数中,但对我来说看起来很糟糕......

这是我的服务功能,效果很好。

 deleteEmpBusArea(employeeId: number, busAreaId: number){
   let params = {
       empId: employeeId,
       bsarId: busAreaId
   };

   return this.http.delete(`${this.envConfig.baseUrl}/employee/delete-emp-bus-area`, {params: stringify(params)}).pipe(share());
}

这是我想给它另一个函数作为参数的函数:

 deleteBusinessArea(area: BusinessArea){
    this.utilitiesDialogService.deleteRowFromDialog(area, this.employeeService.deleteEmpBusArea.bind(this, this.http, this.envConfig, stringify));
}

还有前面调用的函数实现

 deleteRowFromDialog(element: any, funcCalled: Function){
    this.openDeleteDialog(element).afterClosed().pipe(
        switchMap((isClosed) => {
            if (isClosed === false) {
                return funcCalled(element.id);
            }
            return EMPTY;
        }),
        takeUntil(this.unsubscribed)).subscribe(() => {  
    });
}

Stringify 是 .ts 文件中的一个函数,其签名如下:

export function stringify(json: any): any {
    ///code implementation 
}

我期待通过使用绑定属性提供“this”,“this”将获取他所拥有的所有内容(“this.http”、“this.envConfig”等),而不是将它们全部写入 .bind( ) .将它们全部提供绑定是否正确?

另外,stringify 是一个导出函数,我无法在 bind() 属性中发送它并给出错误:

A JS error occurred: Converting circular structure to JSON TypeError: Converting circular structure to JSON

【问题讨论】:

  • 你遇到的问题是javascript的特殊性,与范围有关。阅读本文以了解更多信息:javascriptplayground.com/javascript-variable-scope-this
  • bind() 适合调用不同环境的函数,所以这正是你需要的。您也有 call()apply(),但当您立即调用函数并想要更改上下文时,它们很有用。

标签: angular spring-boot rxjs


【解决方案1】:

answer 有一个很好的例子。使用箭头函数来指定。

    defaultFunction(var: string, fun: (i: string) => number): number {
        return fun(var);
    }

【讨论】:

  • 通常,当您需要了解 Angular 中的语法本质时,您必须搜索有关打字稿的问题,因为这不是 Angular 特定的。
猜你喜欢
  • 2021-10-02
  • 2016-09-23
  • 2020-11-28
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
相关资源
最近更新 更多