我有一些逻辑我想要包装到AngularJS工厂中,以便我可以使用angular的依赖注入。由于逻辑是动态的,我不一定知道什么可以提前打电话。我所拥有的是一个表示要调用的函数名称的字符串。我知道我可以像window["someFunctionName"]()
那样使用字符串运行函数,但是因为所有内容都被封装在工厂中,所以我不知道如何获取工厂的参考来调用它。恩。 sampleFactory["someFuncitonName"]();
如何在工厂内使用angularjs中的字符串调用函数
我发现运行该功能的唯一方法是使用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]();
?有没有更好的方法来做到这一点?谢谢你的帮助。
更新:由于评论中的代码是用户定义的,我无法知道,也无法控制评论中代码的写入方式。我不想强制用户有任何限制。所以我可以期待很少。
你只是想要返回someData.amount? –
有什么办法可以生成代码,而不是将函数定义为函数foo(){},它被定义为this.foo = function(){}? – drdalton
我应该更清楚。代码是用户定义的,所以我不能控制如何/写什么。 – yodaisgreen