如何在AngularJS中动态调用服务

如何在AngularJS中动态调用服务,angularjs,service,factory,Angularjs,Service,Factory,我有20种不同的服务(工厂)。每个服务在执行操作时执行一条规则。 根据规则代码,我想调用一个特定的服务。 我要做的是,我有另一个名为ActionHandler的服务,它包含一个基于调用特定服务的情况的SWITCH语句。为此,我在ActionHandler服务中注入了所有20个服务 我认为这不是最好的做法 谁能告诉我解决这类问题的最佳方法 提前感谢:: angular.forEach(List, function (elem) { switch (elem.ruleCode){

我有20种不同的服务(工厂)。每个服务在执行操作时执行一条规则。 根据规则代码,我想调用一个特定的服务。 我要做的是,我有另一个名为ActionHandler的服务,它包含一个基于调用特定服务的情况的SWITCH语句。为此,我在ActionHandler服务中注入了所有20个服务

我认为这不是最好的做法

谁能告诉我解决这类问题的最佳方法

提前感谢::

angular.forEach(List, function (elem) {
        switch (elem.ruleCode){
            case 'a':{
              callAService();
                break;
            }
            case 'b':{
                callBService();
                break;
            }
            //similarly others case
        }
    })

我认为有几种方法。首先想到的是(可能有点老套):

如果
elem.ruleCode
与服务名称匹配,则可以使用
$injector
根据服务名称获取服务。比如:
$injector.get(elem.ruleCode+'RuleService').foo()
。当然,这需要您的所有服务都有一个名为
foo()
的方法

例如,如果您的
elem.ruleCode
可以具有值a或b,则您将拥有2个服务:
aRuleService
bRuleService
,每个都有一个方法
foo()

我认为有几种方法。首先想到的是(可能有点老套):

如果
elem.ruleCode
与服务名称匹配,则可以使用
$injector
根据服务名称获取服务。比如:
$injector.get(elem.ruleCode+'RuleService').foo()
。当然,这需要您的所有服务都有一个名为
foo()
的方法

例如,如果您的
elem.ruleCode
可以具有值a或b,则您将拥有2个服务:
aRuleService
bRuleService
,每个都有一个方法
foo()