Angular добавить метод класса в качестве параметра - PullRequest
2 голосов
/ 18 июня 2020

У меня есть функция из библиотеки, которая называется так:

example: setMode(CLR.Drop);

Есть другие варианты: Drop, Grab, None

Итак, я создал метод:

selectMode(mode) {
    setMode(mode);
}

При нажатии кнопки я пробовал это:

<button (click)="CLR.Drop">Set Mode</button>

Когда я делаю это выше, я получаю, что CLR.Drop не определен.

Итак, мне нужно передать такое число или строку:

<button (click)="selectMode('drop')">Set Mode</button>

И это должно сделать следующее:

selectMode(mode) {
    if (mode === 'Drop') {
        mode = CLR.Drop;
    } else if (mode === 'Grab') {
        mode = CLR.Grab;
    } else if (mode === 'None') {
        mode = CLR.None;
    }
    setMode(mode);
}

Есть способ сделать это без конца с множеством if или переключателем, или это единственный способ?

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вы можете назначить свойство CLR локальной переменной и передать его обработчику.

export class AppComponent {
  public clr = CLR;

  onClick(mode: any) {
    setMode(mode);
  }
}

Шаблон

<button (mouseup)="onClick(clr.Drop)">Drop mode</button>

Или, в варианте с переключателем, отправьте 'Drop' вместо 'drop'. При сравнении строковых литералов учитывается регистр.

<button (click)="selectMode('Drop')">Set Mode</button>
0 голосов
/ 18 июня 2020

Укажите тип параметра как имя члена класса. И назначьте функцию некоторому методу с именем variable. И вызовите метод /

class Calc {

  add() {
    console.log('I am add');
  }

  subtract() {
    console.log('I am subtract');
  }

}


function CalcCaller(fun: keyof Calc ) {
const method = (new Calc())[fun];
  method();
}

CalcCaller('add');

Playground Link

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