Правильный способ сделать заводской модуль в angularJs

У меня есть такая функция контроллера:

$scope.localTimezone = function (userTimezone,datetime) {
  // ....
  return data;
}

Как правильно сделать из него заводской модуль? Я пробовал следующее, но это дает ошибки.

angular.module('localTimezone',  [])
   .factory('localTimezone',function(userTimezone,datetime) {
      // ...
      return data;
   });


angular.module('app', ['localTimezone'])
   .controller('tasksController',function ($scope,localTimezone) {
     // ...
   });

Я упускаю какую-то концепцию или логику. Может ли кто-нибудь указать мне правильное направление?


person user727728    schedule 06.08.2014    source источник
comment
angular-tips.com/blog/2013/08/understanding-service -types — это отличная статья, описывающая различные типы сервисов в Angular и их различия. Помогал мне, когда я только начинал.   -  person Andrew    schedule 06.08.2014
comment
можете ли вы настроить плункер, показывающий проблему   -  person harishr    schedule 06.08.2014


Ответы (2)


КОНТРОЛЛЕР Неверный пример:

function MainCtrl () {
  this.doSomething = function () {

  };
}
angular
  .module('app')
  .controller('MainCtrl', MainCtrl);

Хорошо:

function MainCtrl (SomeService) {
  this.doSomething = SomeService.doSomething;
}
angular
  .module('app')
  .controller('MainCtrl', MainCtrl);

Плохой заводской пример:

function AnotherService () {

  var someValue = '';

  var someMethod = function () {

  };

  return {
    someValue: someValue,
    someMethod: someMethod
  };

}
angular
  .module('app')
  .factory('AnotherService', AnotherService);

Хорошо:

function AnotherService () {

  var AnotherService = {};

  AnotherService.someValue = '';

  AnotherService.someMethod = function () {

  };

  return AnotherService;
}
angular
  .module('app')
  .factory('AnotherService', AnotherService);

Подробные инструкции см. в этом блоге: утвержденное руководство по стилю AngularJS для команд

person Bijay Rai    schedule 06.08.2014
comment
Предположим, я хочу $http... Как вы вводите в AnotherService? - person emmanuel sio; 29.12.2015
comment
app.service('‹service›', ['$http', function($http) { this.yourVar = function() { ... } }]); - person Bijay Rai; 30.12.2015
comment
Извините, я плохо объясняю, как вы вводите по-хорошему, когда у вас есть функция AnotherService(){ ........} -.... angular.module('app').factory('AnotherService ',Другая служба); - person emmanuel sio; 30.12.2015

Вот пример рабочего кода, основанный на предположении, что userTimezone и datetime являются службами, которые являются частью модуля localTimezone.

Следующее было изменено

  • «данные», которые возвращает ваша фабрика, были изменены, чтобы возвращать строку на основе шаблона фабрики, поскольку вы возвращали «данные», которые ни на что не ссылались
  • создание приложения было перемещено наверх. Этот код должен выполняться раньше всего остального.
  • удалена переменная приложения - мне не нравятся глобальные переменные.

Код:

angular.module('app', ['localTimezone']);

angular.module('localTimezone', []).factory('localTimezone',
  function(userTimezone, datetime) {
    var data = 'hello';
    return { data: data } ;
  });

angular.module('localTimezone').service('userTimezone', function() {
});

angular.module('localTimezone').service('datetime', function() {
});

angular.module('app').controller('tasksController',function ($scope,localTimezone) {
});  

Codepen: http://codepen.io/anon/pen/wijmb (в консоли ошибок нет )

Взгляните на http://angular-tips.com/blog/2013/08/understanding-service-types для получения информации о различных типах служб в Angular.

person Andrew    schedule 06.08.2014