我有一些邏輯我想要包裝到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