如何从字符串值调用范围上的函数

时间:2014-05-16 22:45:24

标签: javascript angularjs angularjs-service

我有一个包含字符串数组的对象

$scope.actions=[
    "add_inscription",
    "add_tools",
    "add_instruction",
    "remove_inscription",
    "remove_tools",
    "remove_instruction"
];

我希望能够通过委托功能进行动态动作调用..

$scope.delegate = function () {

    var arg = arguments[0];

    for ( key in $scope.actions ) {

        if ($scope.actions[key] == arg ) {

            // call function that has a matching name

        }
    }
}

所以在我的模板中我有类似的东西

<button ng-click="delegate('add_inscription')">Add Inscription</button>

我不知道我是否正在考虑正确的方向,但关键是我的行动对象实际上非常大而且我不想写大量的开关案例声明我必须一直更新。

有没有办法以角度进行此操作?

我在直接javascript

中执行此操作没有任何问题
var fnstring = "add_inscription";

// find object
var fn = window[fnstring];

// if object is a function
if (typeof fn === "function") fn();

但在角度上,我无法做到这一点..

1 个答案:

答案 0 :(得分:2)

假设你的&#34;行动&#34;函数在范围内定义,如:

$scope.add_inscription = function(){ ... }

你应该这样做:

var _action = 'add_inscription';
$scope[_action]();