这是我使用angular.js时的堆栈跟踪:
[$injector:unpr] Unknown provider: editorPopupManagerProvider <- editorPopupManager <- libStateManager <- libInjectionManager
http://errors.angularjs.org/1.2.2/$injector/unpr?p0=editorPopupManagerProvider%20%3C-%20editorPopupManager%20%3C-%20libStateManager%20%3C-%20libInjectionManager
这是我使用angular.min.js时的堆栈跟踪:
[$injector:unpr] http://errors.angularjs.org/1.2.2/$injector/unpr?p0=editorPopupManagerProvider%20%3C-%20editorPopupManager%20%3C-%20libStateManager%20%3C-%20libInjectionManager
这只是一个简单的例子,但有时缩小的错误甚至没有帮助。
我期望两种情况下的第一个堆栈跟踪:当我使用angular.js和angular.min.js时。 我导致此异常的代码中没有问题。我故意这样做是为了演示我对angular.min.js的问题,缩小堆栈跟踪并使其真正难以理解。如果这样做的原因是为了避免最终用户看到堆栈跟踪,我明白了。但我需要正常可读的堆栈跟踪才能将其发送到日志记录服务器。
答案 0 :(得分:3)
您的未知提供程序名称可能被缩小器操纵/损坏,因此您需要使用以下语法来纠正它:
myApp.controller('MyCtrl' ['$scope', function ($scope) {
// do stuff with '$scope'
}]);
注意函数是如何包装在一个数组中的,它保留了依赖项的命名约定,因此可以安全地重新映射它们,因为字符串不会被破坏:
myApp.controller('MyCtrl' ['$scope', function (a) {
// do stuff with 'a'
}]);
然后您可以添加其他依赖项(它们需要按照指定的顺序显示):
myApp.controller('MyCtrl' ['$scope', 'MyService', function ($scope, MyService) {
// do stuff...
}]);
答案 1 :(得分:2)
如果您对控制器使用数组声明,则很可能是您的某些指令声明。通常我们这样做:
.controller('MyGreatCtrl',
[ '$scope','$stateParams', // even minified version does is correctly injected
function($scope , $stateParams ,) {
...
以上代码即使缩小也能正常工作。
但是,我们应该以同样的方式做什么 - 是Directive
声明。我们可以像这样做(错误,缩小时的问题):
.directive('myGreatDirective',
[function () {
var directive =
{
restrict: 'E',
...
controller: function ($scope , $element , $attrs) {
...
};
}],
};
return directive;
虽然这是正确的方法:
.directive('myGreatDirective',
[function () {
var directive =
{
restrict: 'E',
...
// the Array declaration also here
controller: ['$scope','$element','$attrs',
function ($scope , $element , $attrs) {
...
};
}],
};
return directive;
指向更多详细信息的链接Dependency Injection
老实说,那是我的问题......