AngularJS Внедрить фабрику в другую фабрику из того же модуля

Я пытаюсь внедрить фабричное приложение в фабрику ApplicationService. Оба определены в одном модуле.

Фабрика приложений (application.model.js)

(function(Object, coreModule) {
    'use strict';       

    // the factory to expose that allows the creation of application instances
    var ApplicationFactory = function() {
        console.log("Application factory!");
        return {foo: 'bar'};
    }

    coreModule.factory('Application', [ApplicationFactory]);
})(Object, angular.module('core'));

Фабрика ApplicationService (application.service.js)

(function(coreModule) {
    'use strict';       

    var ApplicationService = function(Application) {
        var api = {
           shout = function() {console.log(Application);}
        };

        return api;
    }   

    ApplicationService.$inject = ['Application'];
    coreModule.factory('ApplicationService', [ApplicationService]); 
})(angular.module('core'));

Затем я ввожу фабрику ApplicationService в контроллер и вызываю крик метода. Я получаю неопределенное, когда в журнале консоли Приложение всегда неопределенное. Если в контроллере я ввожу приложение, оно работает. Так что я знаю, что обе фабрики работают автономно. Оба файла импортируются в мой index.html.

Я часами искал проблему, но не могу ее найти. Что я делаю не так?


person Paulo Rodrigues    schedule 26.11.2014    source источник


Ответы (1)


См. рабочую демонстрацию ниже.

У вас есть 2 варианта.

а) Уберите здесь квадратные скобки:

coreModule.factory('ApplicationService', ApplicationService)

б) Добавьте внедренное приложение в качестве первого элемента перед ApplicationService:

coreModule.factory('ApplicationService', ['Application', ApplicationService])

var app = angular.module('core', []);

app.controller('firstCtrl', function($scope, ApplicationService) {

  ApplicationService.shout();

});


(function(Object, coreModule) {
  'use strict';

  // the factory to expose that allows the creation of application instances
  var ApplicationFactory = function() {
    console.log("Application factory!");
    return {
      foo: 'bar'
    };
  };

  coreModule.factory('Application', [ApplicationFactory]);
})(Object, angular.module('core'));


(function(coreModule) {
  'use strict';

  var ApplicationService = function(Application) {
    var api = {
      shout: function() {
        console.log(Application);
      }
    };

    return api;
  };

  ApplicationService.$inject = ['Application'];
  coreModule.factory('ApplicationService', ApplicationService);
})(angular.module('core'));
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<body ng-app="core">
  <div ng-controller="firstCtrl">

  </div>
</body>

person sylwester    schedule 26.11.2014
comment
О боже, я понятия не имею, зачем я это сделал: coreModule.factory('ApplicationService', [ApplicationService])! Думаю, это был долгий рабочий день :p Большое спасибо. По какой-то причине мой мозг перепутал объявление с аннотациями внедрения зависимостей: S - person Paulo Rodrigues; 27.11.2014