Подтвердить что ты не робот

Angularjs внедряет поставщика в модуль factory функцией по имени строки для минимизации

У меня есть следующий код:

appModule = angular.module('appModule', []);

appModule.factory('sharedApplication', function($rootScope, $http) {
  var sharedApp;
  sharedApp = {};
  sharedApp.currentView = "home-section";
  sharedApp.pastEvents = null;
  $http.get('api/highlights').success(function(response) {
    return sharedApp.pastEvents = response.data;
  });
  return sharedApp;
});

Этот код работает отлично и, как ожидалось, до тех пор, пока я не попытаюсь минимизировать свой javascript, а затем получаю

    Error: Unknown provider: eProvider <- e

Это потому, что аргумент $http в моей функции factory был переименован в 'e' для целей минимизации. Итак, как я могу вручную сообщить appModule, что нужно вводить по имени, чтобы избежать минимизации нарушения моего кода?

Спасибо заранее.

4b9b3361

Ответ 1

Try

appModule.factory('sharedApplication', ['$rootScope','$http',function($rootScope, $http) {

}]);

рассматривает

Ответ 2

ng-annotate также является хорошей библиотекой, так что требуемая зависимость вводится автоматически. Вы должны проверить это.

Пример кода:

/* ngInject */
appModule.factory('sharedApplication', function($rootScope, $http) {
  var sharedApp;
  sharedApp = {};
  sharedApp.currentView = "home-section";
  sharedApp.pastEvents = null;
  $http.get('api/highlights').success(function(response) {
    return sharedApp.pastEvents = response.data;
  });
  return sharedApp;
});

Тогда вам не нужно писать:

appModule.factory('sharedApplication', ['$rootScope','$http', 
function($rootScope, $http) {
 var sharedApp;
 sharedApp = {};
 sharedApp.currentView = "home-section";
 sharedApp.pastEvents = null;
 $http.get('api/highlights').success(function(response) {
 return sharedApp.pastEvents = response.data;
});

return sharedApp;
}]);

Ответ 3

Более элегантный и понятный подход:

appModule.factory('myFactory', myFactory);

myFactory.$inject = ['$rootScope','$http'];
function myFactory($rootScope, $http) {
    ...
}