我有一个已定义的功能。
Calculator
我有一个名为$scope.myFunction=function(){
alert("works")
}
的变量,它包含一个函数字符串。
$scope.myVar
如何直接从定义的函数($scope.myVar="myFunction()";
)中的变量($scope.myVar
)和而不是调用函数?
类似的东西:
$ scope.myVar();
这是我的代码..
$scope.myFunction
答案 0 :(得分:2)
你可以eval
。这会尝试将字符串的内容解析为可执行的javascript:
eval($scope.myVar);
答案 1 :(得分:1)
您可以使用窗口上下文来调用您的函数:
window[$scope.myVar](arguments);
不要使用eval 。这非常不安全。
完整的工作示例(带参数和范围):
$scope = {};
$scope.myFunction=function(text){
alert(text);
}
$scope.myVar="myFunction";
$scope.myArgs="great job";
$scope[$scope.myVar]($scope.myArgs);

答案 2 :(得分:1)
正如大家所说,eval
非常不安全,但是,如果你真的需要使用它,那么如果你使用角度版本会更好,因为它会评估你在当前$scope
上的表达式
$scope.$eval($scope.myVar)
https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$eval
答案 3 :(得分:0)
人们倾向于跳转到eval
,但Function构造函数通常是更好的解决方案。
无论哪种方式,在您的用例中总体上可能有更好的解决方案。从模板中评估JS通常是禁止的,除非是模板化。在实施任何内容之前,我建议您考虑一下您尝试解决的情况,并努力以不同的方式看待它。通常,更好的解决方案的第一步是意识到您可以从不同的角度看待问题。
$scope = {};
$scope.myFunction=function(){
alert("works")
}
$scope.myVar= new Function("$scope.myFunction()")();

答案 4 :(得分:0)