Ошибка при использовании angular.injector() внутри службы
Я пытаюсь создать сервис в Angular и внутри него, чтобы получить сервис, используя Angular's $injector.get(...)
, (Я знаю, что могу ввести его, но я хочу создать его вручную).
По какой-то причине я получаю эту ошибку:
Uncaught Ошибка: [$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));
Вот поршень, который я сделал. Я надеюсь, что это точно демонстрирует проблему.
2 ответа
На этот вопрос уже есть отличный ответ на SO
/questions/2972948/ne-udaetsya-izvlech-inzhektor-iz-uglovogo-polozheniya/2972966#2972966
Что вам нужно, это сначала добавить модуль 'ng' в ваш конструктор инжектора
angular.injector(['ng', 'plunker']);
Смотрите этот плункер, который содержит ваш код в 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="angular.js@1.3.x" 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);