Как вызвать функцию динамически?

0

Мне нужно динамически вызвать функцию в области, для:

$scope.myFunction1= function(){}
$scope.myFunction2= function(){}

Мне нужно установить атрибут в директиве, например:

<my-directive func-name="myFunction1"></my-directive>

Чтобы я мог указать, какую функцию вызывать без использования оператора if

// then to call the function as:
$scope[attrs["funcName"]]();

Это возможно?

  • 1
    Да, это возможно. Просто попробуйте код хотя бы один раз, прежде чем задать вопрос.
  • 0
    Прочитайте о связующих функциях в директивах (представленных как '&') в угловых документах.
Теги:

2 ответа

2
Лучший ответ

Это еще проще, если вы привязываете атрибут к переменной области с привязкой текста.

scope: {
  funcName: '@'
},
controller: function() {
  $scope[$scope.funcName]();
}

Хотя это похоже на анти-шаблон, когда у Angular уже есть поддержка для передачи функции напрямую. Что вы на самом деле пытаетесь достичь здесь? Откуда появляется функция?

  • 0
    @ обязательный? Я так не думаю. :)
  • 0
    А? Прошло много времени с тех пор, как я использовал Angular. @ связывает текстовое значение атрибута, верно?
Показать ещё 6 комментариев
-1

Вы можете использовать случай переключения, я считаю его эффективным, чем любое условное утверждение

$scope.fun1(){}
$scope.func2(){}

function callFun(funcName){
switch(funcName){
case'func1':{
$scope.func1();
break;
}
case'func2':{
$scope.func2();
break;
}

}
}
  • 0
    Переключатель / регистр является условным оператором.
  • 0
    Я говорил любое другое условное утверждение

Ещё вопросы

Сообщество Overcoder
Наверх
Меню