【问题标题】:AngularJS Error: [$injector:unpr] Unknown provider: eProvider <- e <- $exceptionHandler <- $rootScopeAngularJS 错误:[$injector:unpr] 未知提供者:eProvider <- e <- $exceptionHandler <- $rootScope
【发布时间】:2017-04-28 03:54:12
【问题描述】:

我突然在我们的 EC2 生产实例上看到此错误。我部署了一个新版本并意识到了错误。之后,我部署了早期版本,但问题没有得到解决。无论我之前部署什么工作提交,都会显示该错误。

【问题讨论】:

  • 您是在控制器中包含 $rootScope 还是在控制器中重复也显示相同的错误。
  • 我不知道源代码中的问题来自哪里?它没有给我控制器或模块的名称。它指向的唯一代码是 jQuery 源代码。

标签: angularjs django amazon-s3 amazon-ec2 angular-providers


【解决方案1】:

错误是由缩小引起的。注入有两种语法,隐式和显式。

  1. 隐式注入通过变量名推断应该注入的内容:

    some_module.module_component(function(myService) {...

这将寻找名为 myService 的东西并注入它,但如果变量名被缩小为“e”之类的东西,它将无法找到任何名为“e”的服务,因此 angular 抱怨没有电子提供者。

  1. 显式注入使用字符串来指定注入,并且永远不会缩小字符串:

    some_module.module_component(["myService", function(myService) {...

这将查找名为 myService 的内容并将其分配给 myService 变量,如果变量名称更改,则无关紧要,因为即使最终将其分配给名为 myService 的变量,它仍然会知道查找 myService “e”。

【讨论】:

    【解决方案2】:

    问题已解决,需要注意源代码中的细节,因为它不像从浏览器控制台错误中指向代码中的特定行或其他人如何通过断点解释调试那样简单浏览器开发者工具。

    每当你遇到这样的错误时,你应该如下剖析AngularJS错误中的信息:

    Unknown provider: eProvider &lt;- e &lt;- $exceptionHandler &lt;- $rootScope

    1. Unknown Provider 表示您的注入问题可能是由您拥有的 angularjs 代码的缩小版本引起的。缩小的意思是,您编译的 angularjs 文件已经重命名了您注入到您的 Angular 模块组件(控制器、服务、工厂、指令、装饰器等)之一的服务或变量。重命名(例如,从 $delegate 到 e)可能会导致编译的缩小版本出现问题。是的,对解决问题没有多大帮助,但您应该确保您理解这一点。

    2. eProvider 没有任何意义,因为这是您注入的对象获得的缩小名称,不要尝试在您的代码库中搜索它。那没用。

    3. $exceptionHandler这是最大的提示。您需要找到具有使用此服务或对象的组件的模块。其中之一是导致问题。导致此类问题的原因如下所示:

    some_module.module_component(function(myService) {...

    要修复它,它应该如下所示:

    some_module.module_component(["myService", function(myService) {...

    这仍然让我感到困惑,为什么即使我将部署的修订版恢复为以前工作的修订版,我仍然会看到这个问题。 EC2 实例上编译的 JS 文件似乎没有恢复。

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2016-01-11
      • 1970-01-01
      • 2016-05-09
      • 2014-10-25
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      相关资源
      最近更新 更多