好吧,在我开始解决这个臭名昭著的问题之后,现在我正式秃头了:缩小的AngularJS应用程序无法正常工作,并抛出了以下错误:
错误:[$ injector:unpr]未知提供程序:aProvider <-a http://errors.angularjs.org/1.2.6/ $ injector / unpr?p0 = aProvider%20%3C-%20a位于http:// localhost /my- app/dist/scripts/1bde0e2e.vendor.js:4:11492, 位于http://localhost/my- app/dist/scripts/1bde0e2e.vendor.js:4:26946, 位于Object.c [获得] (http://localhost/my- app/dist/scripts/1bde0e2e.vendor.js:4:26250)位于http://localhost/my- app/dist/scripts/1bde0e2e.vendor.js:4:27041 位于c(http://localhost/my- app/dist/scripts/1bde0e2e.vendor.js:4:26250)at Object.d [作为调用](http:// localhost / my-app / dist / scripts / 1bde0e2e .vendor.js:4:26496)http://localhost/my- app/dist/scripts/1bde0e2e.vendor.js:9:910 at Object.f [as forEach](http://localhost/my-app/dist/scripts/1bde0e2e.vendor。 js:4:11927),位于http://localhost/my- app/dist/scripts/1bde0e2e.vendor.js:9:856, 位于j(http://localhost/my- app/dist/scripts/1bde0e2e.vendor .js:5:27235)
许多其他人也有这个问题,但是看起来可以通过将依赖项声明为数组而不是裸函数参数来解决,如下所示:
angular.module('my-app').controller('LoginCtrl', [ '$scope', 'HttpService', function($scope, HttpService) { ... }]);
代替这个:
angular.module('my-app').controller('LoginCtrl', function($scope, HttpService) { ... });
但这对我来说不起作用。我检查了所有脚本(咖啡和生成的javascript),它们都使用正确的数组样式声明。
这个问题显然不是来自额外的软件包。我尝试将所有额外的程序包引用移出<!-- bower:js -->块(这样它们就不会被grunt缩小),但是问题仍然存在。这意味着,这应该归咎于我的代码…但是,再次,我尝试了(似乎是)仅可用的修复程序,但无济于事。
<!-- bower:js -->
有任何提示,即使如何正确调试也是如此?
提前致谢!
终于我找到了问题所在。是的,这是我错过的DI错误。
对于所有可能同样感到头痛的人:数组格式声明也必须在$routeProvider的resolve选项中完成。就我而言(前面的CoffeeScript):
$routeProvider
resolve
app.config (['$routeProvider', ($routeProvider) -> $routeProvider .when '/', templateUrl: 'views/main.html' controller: 'MainCtrl' resolve: groups: ['GroupService', (GroupService) -> # I MISSED THIS return GroupService.getAll() ] entries: ['EntryService', (EntryService) -> # AND THIS return EntryService.getAll() ] # ... ])
希望这可以帮助!