Как реализовать функцию обратного вызова в Typescript (Angular Material)? - PullRequest
0 голосов
/ 29 октября 2018

Я использую Angular Material Dialog , я хочу передать опциональную функцию обратного вызова и выполнить, если пользователь щелкнет OK button. Могу ли я узнать, как это реализовать?

askUser(customData: any) {
    openDialog() {
        const dialogRef = this.dialog.open(AskDialog, {
            data: customData
        });

        dialogRef.afterClosed().subscribe(isOK=> {
            if (isOK && customData.hasOwnProperty('callback')) {
                // ??? how to execute the "customData.callback"
            }
        });
    }
}

Я надеюсь, что смогу использовать askUser() как таковой:

function freeGift(gift: string) { /* ... */ }
function contactPolice(phone: number, email: string) { /* ... */ }

askUser({ // callback
    displayText: 'Are you a superman?',
    callback: freeGift('blue shirt')
});

askUser({ // different callback with different arguments
    displayText: 'Are you a criminal?',
    callback: contactPolice(this.phone, 'police@gmail.com')
});

askUser({ // no callback
    displayText: 'Do not disturb!'
});

Как PASS обратный вызов в customData.callback и как вызвать и выполнить функцию?

Другими словами, как передать функцию в «переменную» и выполнить «переменную» позже с соответствующим контекстом?

Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Это может быть достигнуто довольно легко, вы можете выполнить функцию, просто используя (). Сделал пример приложения для разработки; https://stackblitz.com/edit/angular-8drwks

0 голосов
/ 29 октября 2018

Вы можете сделать что-то вроде этого:

askUser({ // callback
    displayText: 'Are you a superman?',
    callback: () => freeGift('blue shirt')
});

и вы бы назвали это как:

customData.callback();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...