如何使用angularjs中的字符串从工厂内调用函数

yod*_*een 2 javascript angularjs angularjs-service angularjs-factory

我有一些逻辑我想包装到AngularJS工厂,所以我可以使用angular的依赖注入.由于逻辑是动态的,我不一定知道提前调用什么.我所拥有的是一个字符串,表示要调用的函数的名称.我知道我可以做类似于window["someFunctionName"]()使用字符串运行函数的东西,但由于所有内容都包含在工厂中,我不知道如何引用工厂来调用它.恩. sampleFactory["someFuncitonName"]();

我发现运行该功能的唯一方法是使用eval("someFuncitonName()").显然,如果可以,我想避免使用eval.

这是我正在尝试做的一个例子:

'use strict';

angular.module('testApp')
  .factory('testFactory', function (someData) {

    // User defined code that was wrapped up in a factory
    function foo() {
        someData.amount = 5;
    }
    // End dynamic code

    return {
      funcRunner: function(functionName) {
        testFactory[functionName]();
      } 
    };

  });
Run Code Online (Sandbox Code Playgroud)

在控制器中,用户可以运行这样的东西testFactory.funcRunner("foo");.

有没有办法在这些方面做点什么testFactory[functionName]();?有没有更好的方法来做到这一点?谢谢你的帮助.

更新: 由于注释中的代码是用户定义的,我无法知道,也无法控制注释中的代码是如何编写的.我不想强迫用户施加任何限制.因此,我可以期待很少.

zs2*_*020 5

试试这种方法:

angular.module('testApp').factory('testFactory', function () {
    var service = this;
    this.foo = function() {
        someData.amount = 5;
    }

    return {
        funcRunner: function (functionName) {
            service[functionName]();
        }
    };
});


function Ctrl($scope, testFactory) {
    $scope.click = function () {
        testFactory.funcRunner("foo");
    }
}
Run Code Online (Sandbox Code Playgroud)