在服务中使用angular.injector()时出错

时间:2017-01-09 10:36:06

标签: angularjs angularjs-injector

我正在尝试使用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));

这是我制作的一个傻瓜。 我希望它能够准确地证明这个问题。

plunker

2 个答案:

答案 0 :(得分:1)

请参阅此app.js

中包含您的代码的plunker

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);

答案 1 :(得分:1)

这个问题在SO

上已经有了很好的答案

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

您需要的是添加&#39;模块首先在您的注入构造函数

angular.injector(['ng', 'plunker']);