2017-01-09 38 views
1

我试图在angular中创建一个服务,并使用angular的$injector.get(...)来获得服务。 (我知道我可以注入它,但我想手动创建它)。在服务中使用angular.injector()时出错

出于某种原因,我得到这个错误:

Uncaught Error: [$injector:unpr] Unknown provider:
$rootElementProvider <- $rootElement <- $location <- $urlRouter <- $state <- $location

(function() { 
    var $injector = angular.injector(["myApp"]);//Here is where I get the error 
    var myService= $injector.get("myService"); 

    var pseudoService = function(){ 
     var service = myService; 
     return{ 
      service:service 
     } 
    } 

    app.factory("pseudoService", pseudoService); 
}(angular)); 

这里是一个plunker我做了。 我希望它精确地证明了这个问题。

plunker

+0

无所不有在该plunker –

+0

可能的复制[无法检索角度喷油器(http://stackoverflow.com/questions/13400687/cant-retrieve-the-injector-from-angular) –

回答

1

看到这个plunker包含您的代码app.js

https://plnkr.co/edit/5VA5XgbNiCAX0ZcjDADo?p=preview

现在,它的工作的罚款。

您正在编写injector代码,如果服务不可用,并且您必须在angular.injector()函数中快速添加ng,以获取更多信息https://docs.angularjs.org/api/ng/function/angular.injector。这就是为什么你所得到的错误

的index.html

<!DOCTYPE html> 
<html ng-app="plunker"> 

    <head> 
    <meta charset="utf-8" /> 
    <title>AngularJS Plunker</title> 
    <script>document.write('<base href="' + document.location + '" />');</script> 
    <link rel="stylesheet" href="style.css" /> 
    <script data-require="[email protected]" src="https://code.angularjs.org/1.3.20/angular.js" data-semver="1.3.20"></script> 

    <script src="app.js"></script> 
    </head> 

    <body ng-controller="MainCtrl"> 
    <p>Hello {{name}}!</p> 
    </body> 

</html> 

app.js

var app = angular.module('plunker', []); 

app.controller('MainCtrl', function($scope) { 
    $scope.name = 'World'; 


    var $injector = angular.injector(['ng', 'plunker']); 
    var a = $injector.get('myService') 
    console.log(a); 
}); 

app.factory('pseudoService', pseudoService); 

var pseudoService = function(){ 
    var service = myService; 
    myService.sayHello(); 
    return{ 
    service:service 
    } 
} 



var myService = function(){ 
    var sayHello = function(){ 
    alert("Hello") 
    } 
    return{ 
    sayHello:sayHello 
    } 
} 

app.service('myService', myService); 
+0

它是在代码中的其他地方定义的,它代表不同的服务 – Joe

+0

您确定显示的错误属于您提供的代码吗?如果没有,请提供该代码。这与依赖注入有关 –

+0

你在应用中使用了'ui.router'吗? –