2017-01-09 2 views
1

Я пытаюсь создать сервис в угловом и внутри него, чтобы получить услугу с использованием углового $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-angle) –

ответ

1

Смотрите эту plunker, который содержит код в app.js

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

Теперь, оборотный штраф.

Вы пишете injector код, в котором услуга не доступна, и вы должны добавить ng explixitly в функции angular.injector(), для получения дополнительной информации 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' в своем приложении? –

1

Этот вопрос уже есть большой ответ на SO

https://stackoverflow.com/a/13403660/2204146

Что вам нужно добавить модуль «нг» первый в своем инжекторной конструктор

angular.injector(['ng', 'plunker']); 
Смежные вопросы