AngularJS: Когда использовать сервис вместо фабрики
Пожалуйста, потерпите меня здесь. Я знаю, что есть и другие ответы, такие как:AngularJS: Сервис против провайдера против фабрики
Однако я все еще могуне понимаю, когда тыбуду использовать сервис на заводе.
Из того, что я могу сказать, фабрика обычно используется для созданияобщий» функции, которые могут быть вызваны несколькими контроллерами:Создание общих функций контроллера
Angular docs, кажется, предпочитает фабрику, а не сервис. Они даже ссылаются наоказание услуг" когда они используют фабрику, что еще более запутанно!http://docs.angularjs.org/guide/dev_guide.services.creating_services
Так когда же можно будет воспользоваться услугой?
Есть ли что-то, что только возможно или намного проще сделать с помощью сервиса?
Есть что-нибудь другое, что происходит за кулисами? Различия производительности / памяти?
Вот'Это пример. Кроме метода объявления, они кажутся идентичными, и я могуне понимаю, почему яделаю одно против другого.http://jsfiddle.net/uEpkE/
Обновить: От Томаса Ответ, по-видимому, подразумевает, что сервис предназначен для более простой логики, а фабрика для более сложной логики с закрытыми методами, поэтому я обновил код скрипты ниже, и кажется, что оба способны поддерживать частные функции?
myApp.factory('fooFactory', function() {
var fooVar;
var addHi = function(foo){ fooVar = 'Hi '+foo; }
return {
setFoobar: function(foo){
addHi(foo);
},
getFoobar:function(){
return fooVar;
}
};
});
myApp.service('fooService', function() {
var fooVar;
var addHi = function(foo){ fooVar = 'Hi '+foo;}
this.setFoobar = function(foo){
addHi(foo);
}
this.getFoobar = function(){
return fooVar;
}
});
function MyCtrl($scope, fooService, fooFactory) {
fooFactory.setFoobar("fooFactory");
fooService.setFoobar("fooService");
//foobars = "Hi fooFactory, Hi fooService"
$scope.foobars = [
fooFactory.getFoobar(),
fooService.getFoobar()
];
}