2015-11-29 59 views
0

我需要在范围上动态地调用一个函数,用于:如何动态调用函数?

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

我需要设置一个属性,如指令:

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

所以,我可以指定哪些功能,而无需使用调用如果声明

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

这可能吗?

+1

是的,它可能以其高效。在提问前至少尝试一次代码。 –

+0

阅读有关角度文档中指令(用'&'表示)中的绑定函数。 – haimlit

回答

2

如果使用文本绑定将属性绑定到范围变量,则更加容易。

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

虽然这看起来像一个反模式,当Angular已经支持直接传递一个函数。你究竟想在这里实现什么?函数名称来自哪里?

+0

'@'绑定?我不这么认为。 :) –

+0

呃?自从我使用Angular以来已经有一段时间了。 '@'绑定属性的文本值,对吗? –

+0

是的,它的确如此。它如何帮助调用一个函数? –

-1

您可以使用开关的情况下,我觉得比任何条件语句

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

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

} 
} 
+0

Switch/case **是一个条件语句。 –

+0

我在说任何其他有条件的陈述 –