AngularJS - каковы основные различия в различных способах объявления сервиса в angular?

Я работаю над приложением angularJS и стараюсь придерживаться наиболее эффективных и общепринятых стилей разработки в AngularJ. В настоящее время я использую этот способ объявления моих услуг следующим образом:

app.factory('MyService', function() {
  /* ... */
  function doSomething(){
     console.log('I just did something');

  }

  function iAmNotVisible(){
      console.log('I am not accessible from the outside');
  }
  /* ... */

  return{
     doSomething: doSomething
  };
});

Тем не менее, существует множество примеров, и я не совсем уверен, какой стиль дизайна следует придерживаться. Может ли кто-то с обширными знаниями об услугах объяснить причину, по которой определенный стиль более актуален, чем другой?

Полезно ли то, что я делаю, кроме ограничения доступа к определенным функциям в моем сервисе?

3 ответа

Я бы предложил вам макет вашего factory или же service как они делают в приложении angular-seed, за исключением того, что приложение раздражающе использует только value в services.js шаблонный. Однако вы можете адаптировать макет, который они используют для контроллеров, директив и фильтров.

'use strict';

/* Filters */

angular.module('myApp.filters', []).
  filter('interpolate', ['version', function(version) {
    return function(text) {
      return String(text).replace(/\%VERSION\%/mg, version);
    }
  }]);

Что значит для службы вы бы сделали:

'use strict';

/* Services */

angular.module('myApp.filters', []).
  service('myservice', ['provider1', 'provider2', function(provider1, provider2) {
      this.foo = function() { 
          return 'foo'; 
      };
  }]).
  factory('myfactoryprovider', ['myservice', function(myservice) {
       return "whatever";
  }]);

В нем больше шаблонов, чем вам абсолютно необходимо, но это минимизирует безопасность и поддерживает чистоту ваших пространств имен.

Чем все, что вам нужно сделать, это решить, какой из const, value, factory или же service является наиболее подходящим. использование service если вы хотите создать один объект: он вызывается как конструктор, поэтому вы просто назначаете любые методы this и все будет делить один и тот же объект. использование factory если вы хотите получить полный контроль над тем, создается ли объект, хотя он по-прежнему вызывается только один раз. использование value чтобы вернуть простое значение, используйте const для значений, которые вы можете использовать в config,

Я не верю, что есть принятый стандарт, но я сам следую этому соглашению:

var myServiceFn = function (rootScope, http) { ... };
...
app.factory('MyService', ['$rootScope', '$http', myServiceFn]);

Я чувствую, что это чище, чем определение встроенной функции, а также позволяет сделать правильный ввод, если я когда-нибудь решу минимизировать свои файлы. (см. http://docs.angularjs.org/tutorial/step_05).

В качестве примера я определяю сервисы внутри модулей следующим образом:

angular.module('userModule', [])
  .service('userService', function() {
    this.user = null;

    this.getUser = function() {
      return this.user;
    };

    this.userIsNull = function() {
      return (this.user === null);
    };

    this.signout = function() {
      this.user = null;
    };
  })

Я думаю, что более понятно использовать.service, а не.factory?

Другие вопросы по тегам