Как отправить функцию в качестве параметра в угловых - PullRequest
0 голосов
/ 09 января 2019

Я хочу отправить функцию в качестве параметра. Когда я вызываю его в другой функции «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» с помощью свойства bind, «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 голосов
/ 09 января 2019

Этот ответ имеет хороший пример. Используйте стрелки для указания.

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