【发布时间】:2014-01-08 15:24:59
【问题描述】:
我有一些逻辑想封装到 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](); 的方式做一些事情吗?有没有更好的方法来做到这一点?感谢您的帮助。
更新: 由于注释中的代码是用户定义的,我无法知道,也无法控制 cmets 中的代码是如何编写的。我不想对用户施加任何限制。因此,我可以期待的很少。
【问题讨论】:
-
你只是想返回 someData.amount 吗?
-
有什么方法可以生成代码,而不是将函数定义为 function foo() {} 而是定义为 this.foo = function () {}?
-
我应该更清楚。代码是用户定义的,因此我无法控制编写方式/内容。
标签: javascript angularjs angularjs-service angularjs-factory