【问题标题】:Error when using angular.injector() within a service在服务中使用 angular.injector() 时出错
【发布时间】:2017-05-23 14:19:11
【问题描述】:

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

这是我做的一个小插曲。 我希望它能准确地说明问题。

plunker

【问题讨论】:

标签: angularjs angularjs-injector


【解决方案1】:

这个问题已经有了很好的答案

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

您需要在注入器构造函数中首先添加“ng”模块

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 它被定义在代码的其他地方,它代表不同的服务
    • 您确定显示的错误属于您提供的代码吗?如果没有,请提供该代码。这与依赖注入有关
    • 您是否在应用中使用了ui.router
    • ui.router 工作正常。仅当我尝试使用 angular.injector() 时才会出现问题
    • 我添加了一个 plunker
    猜你喜欢
    • 2016-11-21
    • 2011-08-06
    • 1970-01-01
    • 2013-05-28
    • 2014-10-18
    • 2016-10-25
    • 2015-03-10
    • 2011-08-27
    相关资源
    最近更新 更多