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?