如何在angularJs中的控制器运行时以他的名字调用服务?

时间:2015-10-07 12:34:41

标签: angularjs service dependency-injection

我将服务名称从一个控制器传递给另一个控制器作为angularjs中的参数。当我在第二个控制器中收到该变量并将其用作服务名称时,我收到一个错误,即serviceNameVariable.get不是函数。所以我的问题是,如何在控制器中使用变量作为服务名称?

2 个答案:

答案 0 :(得分:3)

以他的名义获得服务并不困难。

依赖注入也可以在运行时以角度进行:

angular.module("someApp").controller("childController", [
    "$injector",
    function($injector){
        var serviceName = "someServiceName";

        var service = $injector.get(serviceName);

        service.executeAction(someParams);
    }
]);

答案 1 :(得分:0)

查看Angular的$injector service,它允许您在任何地方动态检索自己的或原生的角度模块:

  

$injector用于检索由provider,实例化类型,调用方法和加载模块定义的对象实例。

我们像其他任何服务一样注入$injector服务:

app.controller('ctrl', function ($injector) {
    var serviceNameVariable = '$http'; // or some input
    var service = $injector.get(serviceNameVariable);

    // Use the 'injected' service, in this case the $http#get method:
    service.get('http://endpoint');
});