AngularJS调试:[$injector:unpr]未知提供者:e?

7

我该如何调试Angular的错误:

Uncaught Error: [$injector:modulerr] Failed to instantiate module zvApp due to:
Error: [$injector:unpr] Unknown provider: e
http://errors.angularjs.org/1.4.3/$injector/unpr?p0=e
    at http://app.dev/build/js/vendor-53eec796.js:3:19384

有一些提供者未知,但是是哪一个?我找不到一种简单的方法来调试这个问题。已经尝试了所有方法..认为这是第三方包中的一个错误,但如果没有调试就不能确定。


1
请检查您的依赖注入,您存在未经缩小处理的不安全注入。 - dfsq
angular.min.js 替换为 angular.js 可以获得更好的错误消息,但这绝对是您注入脚本的方式存在问题。完整的 angular.js 至少会告诉您哪个注入出了问题。 - Claies
@dfsq,你是什么意思?我并不是那么厉害的Angular英雄。 - user1867254
1
@Claies已经在使用非压缩版本,但输出结果没有帮助。 - user1867254
@Claies 这是被压缩过的代码,因此变量(构造函数的参数)只有短名称,很难弄清楚正在发生什么。 - PSL
显示剩余2条评论
1个回答

20

很可能你的问题是缺少显式依赖注入声明(除非使用ng-annotate进行代码最小化),可以使用数组语法 (.service('myService', ['$http', function($http){...) 或者 $inject 静态属性 (MyService.$inject=['$q']) 在构造函数上。如果在后期或缩小后的代码中找到它会很困难。因此,通常建议在使用ng-app指令时使用ng-strict-di,在开发或运行非最小化代码的应用程序时,它将在缺少显式依赖注入声明的地方抛出更多信息性错误。

例如:

如果使用ng-app,那么:

<html ng-app="myApp" ng-strict-di>

如果需要手动引导,则将其指定为选项。

angular.bootstrap(document, ['myApp'], {
  strictDi: true
});

打开 strict-di 后,Angular 注入器会在实例化之前特别检查注释是否显式声明,如果缺失则会导致应用程序出错,这通常有助于预防此类问题或尽早发现它们。一般来说,打开 strict-di 选项有助于捕获几乎每个定义中的依赖注入,包括 run、config 甚至解析函数(与路由、模态框等一起使用)。


3
哇,这将成为网络上最好的帮助。谢谢! - user1867254

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接