मेरा मानना है कि किसी सेवा के भीतर किसी वस्तु का नया उदाहरण बनाने का अच्छा कारण है। हमें खुले दिमाग के साथ-साथ केवल यह कहना चाहिए कि हमें ऐसा काम कभी नहीं करना चाहिए, लेकिन एक कारण के लिए सिंगलटन को इस तरह से बनाया गया था । नियंत्रकों को ऐप के जीवनचक्र के भीतर अक्सर बनाया और नष्ट किया जाता है, लेकिन सेवाओं को लगातार होना चाहिए।
मैं एक ऐसे उपयोग के मामले के बारे में सोच सकता हूं, जहां आपके पास किसी प्रकार का कार्य प्रवाह हो, जैसे भुगतान स्वीकार करना और आपके पास कई गुण सेट हैं, लेकिन अब उनका भुगतान प्रकार बदलना होगा क्योंकि ग्राहक का क्रेडिट कार्ड विफल हो गया है और उन्हें एक अलग रूप प्रदान करना होगा भुगतान। बेशक, यह आपके ऐप को बनाने के तरीके के साथ बहुत कुछ करता है। आप भुगतान ऑब्जेक्ट के लिए सभी गुणों को रीसेट कर सकते हैं , या आप सेवा के भीतर किसी ऑब्जेक्ट की एक नई आवृत्ति बना सकते हैं । लेकिन, आप सेवा का नया उदाहरण नहीं चाहेंगे, न ही आप पृष्ठ को रीफ्रेश करना चाहेंगे।
मेरा मानना है कि एक समाधान सेवा के भीतर एक वस्तु प्रदान कर रहा है जिसे आप एक नया उदाहरण बना सकते हैं और सेट कर सकते हैं। लेकिन, बस स्पष्ट होने के लिए, सेवा का एकल उदाहरण महत्वपूर्ण है क्योंकि एक नियंत्रक को कई बार बनाया और नष्ट किया जा सकता है, लेकिन सेवाओं को दृढ़ता की आवश्यकता होती है। आप जो खोज रहे हैं वह एंगुलर के भीतर एक सीधा तरीका नहीं हो सकता है, लेकिन एक वस्तु पैटर्न जिसे आप अपनी सेवा के अंदर प्रबंधित कर सकते हैं।
एक उदाहरण के रूप में, मेरे पास एक रीसेट बटन है। (यह परीक्षण नहीं किया गया है, इसकी वास्तव में एक सेवा के भीतर एक नई वस्तु बनाने के लिए उपयोग के मामले का सिर्फ एक त्वरित विचार है।
app.controller("PaymentController", ['$scope','PaymentService',function($scope, PaymentService) {
$scope.utility = {
reset: PaymentService.payment.reset()
};
}]);
app.factory("PaymentService", ['$http', function ($http) {
var paymentURL = "https://www.paymentserviceprovider.com/servicename/token/"
function PaymentObject(){
// this.user = new User();
/** Credit Card*/
// this.paymentMethod = "";
//...
}
var payment = {
options: ["Cash", "Check", "Existing Credit Card", "New Credit Card"],
paymentMethod: new PaymentObject(),
getService: function(success, fail){
var request = $http({
method: "get",
url: paymentURL
}
);
return ( request.then(success, fail) );
}
//...
}
return {
payment: {
reset: function(){
payment.paymentMethod = new PaymentObject();
},
request: function(success, fail){
return payment.getService(success, fail)
}
}
}
}]);