Обратный вызов в интерфейсе с параметрами - PullRequest
0 голосов
/ 04 июня 2019

В настоящее время я реализую общий элемент выпадающего меню, используя Angular (v8.0.1). Поэтому я планировал создать выпадающий список с массивом элементов определенного интерфейса, как показано ниже:

export interface DropdownSettings {
    title: string;
    callback: (...params: any) => any;
}

Для каждого возможного раскрывающегося меню создается объект интерфейса, передаваемый компоненту;

public filter_options: DropdownSettings[] = [
    {
        title: 'Date ascending',
        callback: ??
    },
    ...
}

Где параметры затем передаются компоненту с использованием стандартного ввода:

<dropdown title="Filter"
          [options]="filter_options">
</dropdown>

Если пользователь выбирает элемент в раскрывающемся списке, должен быть вызван обратный вызов set для выполнения некоторых действий с переданным набором данных. Сам обратный вызов вызывается следующим образом в реализации компонентов выпадающего меню:

elementSelected(callback: (??) => void) {
    callback(??);
    this.toggleVisible();
}

Возникает следующая проблема, также отмеченная вопросительными знаками. В функции обратного вызова у меня нет прямого доступа к закрытым переменным-членам, что имеет смысл, так как область видимости меняется. Однако я бы также предпочел не передавать, скажем, огромный набор данных, компоненту. Это просто потому, что само выпадающее меню не должно иметь доступа к этим данным. Поэтому я хотел бы указать функцию, которая помечена как закрытая или статическая в компоненте, в котором создается раскрывающееся меню, что означает, что все операции будут выполняться внутри самого родительского компонента.

private static filterByDate(dataset: Redeem[]): void {
    dataset.sort((a: Redeem, b: Redeem) => {
        a = new Date(a.created_at);
        b = new Date(b.created_at);
        return a > b ? -1 : a < b ? 1 : 0;
    });
}

Итак, возникает главный вопрос: Как я могу указать функцию обратного вызова в интерфейсе с дополнительными параметрами?

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