2014-01-14 4 views
3

Это трассировки стека, когда я использую angular.js:уменьшенная AngularJS дает мне нечитаемые ошибки

[$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, который минимизирует трассировку стека и делает ее очень трудной для понимания. Я понимаю, если причина в том, что он не позволяет конечным пользователям видеть трассировку стека. Но мне нужна нормальная читаемая трассировка стека, чтобы отправить ее на сервер регистрации.

+1

Что вы хотите сказать? Что вы ожидаете? Используйте несрочную версию в разработке, чтобы упростить ее отладку. –

+0

Даже если я столкнулся с проблемой, используйте этот стиль аннотации зависимостей 'someModule.factory ('greeter', ['$ window', function (переименованный $ window) {...}]);' в целом приложении. Проблема в том, где вы определили 'editorPopupManagerProvider'. Кроме того, вы можете отправить код 'editorPopupManagerProvider'? – Satpal

ответ

3

Ваше неизвестное имя поставщика, вероятно, манипулируют/подогнаны по Minifier, таким образом, вы должны использовать следующий синтаксис, чтобы исправить это:

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... 
}]); 
+0

Спасибо. Я решил проблему с удалением uglifyjs pipe из gulp. :) –

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

Честно говоря, это была моя проблема ...

+0

вы скалы. Он решил мою ошибку: [$ injector: unpr] Неизвестный поставщик: eProvider <- e проблема благодаря –

Смежные вопросы