कृपया यहां मेरे साथ रहें। मुझे पता है कि अन्य उत्तर भी हैं जैसे: एंगुलरजेएस: सेवा बनाम प्रदाता बनाम कारखाना
हालाँकि मैं अभी भी यह पता नहीं लगा सकता कि आप कारखाने में सेवा का उपयोग कब करेंगे।
मैं जो बता सकता हूं कि कारखाने का उपयोग आमतौर पर "सामान्य" कार्यों को बनाने के लिए किया जाता है जिसे कई नियंत्रकों द्वारा बुलाया जा सकता है: सामान्य नियंत्रक फ़ंक्शन बनाना
कोणीय डॉक्स प्रतीत होता है कि सेवा से अधिक कारखाने पसंद करते हैं। वे "सेवा" का भी उल्लेख करते हैं जब वे कारखाने का उपयोग करते हैं जो और भी अधिक भ्रमित होता है! 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()
];
}