AngularJS错误:[$ injector:unpr]未知提供者:eProvider< - e< - $ exceptionHandler< - $ rootScope

时间:2016-12-13 06:49:19

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

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

2 个答案:

答案 0 :(得分:2)

错误是由缩小造成的。注入有两种语法,包括隐式和显式。

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

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

  2. 这将寻找名为myService的东西并将其注入,但如果将变量名称缩小为类似“e”的东西,它将无法找到任何名为“e”的服务,因此angular抱怨没有eProvider。

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

      some_module.module_component([“myService”,function(myService){...

    2. 这将寻找名为myService的东西并将其分配给myService变量,如果变量名称发生变化,则无关紧要,因为即使最终将其分配给名为的变量,它仍然会知道查找myService “E”。

答案 1 :(得分:0)

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

每当出现这样的错误时,您应该按照以下方式剖析AngularJS错误中的信息:

Unknown provider: eProvider <- e <- $exceptionHandler <- $rootScope

  1. 未知提供商表示您的注入问题可能是由您拥有的angularjs代码的缩小版本引起的。缩小的意思是,您编译的angularjs文件已重命名为您注入到其中一个角度模块组件(控制器,服务,工厂,指令,装饰器等)中的服务或变量。重命名(例如从$ delegate到e)可能导致编译的缩小版本中的问题。是的,没有太多帮助解决问题,但你应该确保你理解这一点。

  2. eProvider&lt; - e 没有任何意义,因为这是您注入的对象获得的缩小名称,并且不会尝试在您的代码库中搜索它。这无济于事。

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

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

    并修复它,它应该是这样的:

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

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

    我希望这会有所帮助。