2017-01-09 66 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'嗎? –