如何在angular中发送函数作为参数

时间:2019-01-09 07:47:08

标签: angular spring-boot rxjs

我想发送一个函数作为参数。当我在其他函数“ this”和其他函数(例如“ HttpClient”,“ urlBase”)中调用它时,则未定义。

我已经在Internet上搜索并找到关于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 
}

我期望通过使用bind属性提供“ this”,“ this”将占用他所有的东西(“ this.http”,“ this.envConfig”等),而不是全部用.bind( )。提供所有这些绑定是否正确?

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

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

1 个答案:

答案 0 :(得分:1)

answer有一个很好的例子。使用箭头功能指定。

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