我有一些逻辑我想包装到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](); } }; });
在控制器中,用户可以运行这样的东西testFactory.funcRunner("foo");
.
有没有办法在这些方面做点什么testFactory[functionName]();
?有没有更好的方法来做到这一点?谢谢你的帮助.
更新: 由于注释中的代码是用户定义的,我无法知道,也无法控制注释中的代码是如何编写的.我不想强迫用户施加任何限制.因此,我可以期待很少.
试试这种方法:
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"); } }