В настоящее время я реализую общий элемент выпадающего меню, используя 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;
});
}
Итак, возникает главный вопрос:
Как я могу указать функцию обратного вызова в интерфейсе с дополнительными параметрами?