Я вважаю, що є вагомі причини створювати новий екземпляр об’єкта в службі. Ми також повинні бути відкритими, а не просто говорити, що ніколи не повинні робити такого, але синглтон був зроблений таким чином з причини . Контролери створюються та знищуються часто протягом життєвого циклу програми, але служби повинні бути постійними.
Я можу придумати варіант використання, коли у вас є якийсь робочий процес, наприклад, прийняття платежу, і у вас встановлено кілька властивостей, але тепер потрібно змінити їх тип оплати, оскільки кредитна картка клієнта не вдалася, і їм потрібно надати іншу форму оплата. Звичайно, це багато в чому пов’язане зі способом створення програми. Ви можете скинути всі властивості для об’єкта платежу або створити новий екземпляр об’єкта в службі . Але ви не хотіли б нового екземпляра служби, а також не хотіли б оновлювати сторінку.
Я вважаю, що рішенням є надання в службі об’єкта, який ви можете створити новим екземпляром та встановити. Але, щоб було зрозуміло, єдиний екземпляр служби важливий, оскільки контролер може бути створений і знищений багато разів, але служби потребують наполегливості. Те, що ви шукаєте, може бути не прямим методом в Angular, а шаблоном об’єкта, яким ви можете керувати у своїй службі.
Як приклад, я зробив кнопку скидання . (Це не перевірено, це насправді лише швидке уявлення про варіант використання для створення нового об'єкта в службі.
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)
}
}
}
}]);