Ошибка при использовании angular.injector() в службе

Я пытаюсь создать службу в angular и внутри нее, чтобы получить службу, используя angular $injector.get(...). (Я знаю, что могу внедрить его, но я хочу создать его вручную).

По какой-то причине я получаю эту ошибку:

Неперехваченная ошибка: [$injector:unpr] Неизвестный поставщик:
$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));

Вот плунжер, который я сделал. Я надеюсь, что это демонстрирует проблему точно.

планкер


person Joe    schedule 09.01.2017    source источник
comment
В этом плунжере ничего нет   -  person Mr_Perfect    schedule 09.01.2017
comment
Возможный дубликат Не удается получить инжектор из angular   -  person layonez    schedule 09.01.2017


Ответы (2)


Посмотрите этот плункер, который содержит ваш код в app.js

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

Теперь он работает нормально.

Вы пишете injector код, где служба недоступна, и вы должны явно добавить ng в функцию 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);
person Mr_Perfect    schedule 09.01.2017
comment
он определен где-то еще в коде и представляет другую службу - person Joe; 09.01.2017
comment
Вы уверены, что показанная ошибка относится к предоставленному вами коду? Если нет, укажите этот код. Это связано с внедрением зависимостей - person Mr_Perfect; 09.01.2017
comment
Вы использовали ui.router в своем приложении? - person Mr_Perfect; 09.01.2017
comment
ui.router работает нормально. проблема возникает только тогда, когда я пытаюсь использовать angular.injector() - person Joe; 09.01.2017
comment
Я добавил плунжер - person Joe; 09.01.2017
comment
В этом плунжере ничего нет - person Mr_Perfect; 09.01.2017

На этот вопрос уже есть отличный ответ на SO

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

Что вам нужно, так это сначала добавить модуль 'ng' в конструктор инжектора.

angular.injector(['ng', 'plunker']);
person layonez    schedule 09.01.2017