Saya yakin ada alasan bagus untuk membuat instance baru dari sebuah objek dalam layanan. Kita juga harus tetap berpikiran terbuka daripada hanya mengatakan kita tidak boleh melakukan hal seperti itu, tetapi singleton dibuat seperti itu karena suatu alasan . Pengontrol sering dibuat dan dihancurkan dalam siklus aplikasi, tetapi layanan harus tetap ada.
Saya dapat memikirkan kasus penggunaan di mana Anda memiliki beberapa jenis alur kerja, seperti menerima pembayaran dan Anda memiliki beberapa properti yang ditetapkan, tetapi sekarang harus mengubah jenis pembayaran mereka karena kartu kredit pelanggan gagal dan mereka perlu memberikan bentuk lain dari pembayaran. Tentu saja, ini banyak hubungannya dengan cara Anda membuat aplikasi. Anda dapat mengatur ulang semua properti untuk objek pembayaran, atau Anda dapat membuat contoh baru dari objek dalam layanan . Namun, Anda tidak ingin layanan baru, atau menyegarkan halaman.
Saya yakin solusi menyediakan objek dalam layanan yang dapat Anda buat dan setel instance baru. Namun, untuk memperjelas, satu contoh layanan penting karena pengontrol dapat dibuat dan dimusnahkan berkali-kali, tetapi layanan tersebut membutuhkan ketekunan. Apa yang Anda cari mungkin bukan metode langsung dalam Angular, tetapi pola objek yang dapat Anda kelola di dalam layanan Anda.
Sebagai contoh, saya telah membuat tombol reset . (Ini belum diuji, ini benar-benar hanya gagasan singkat tentang kasus penggunaan untuk membuat objek baru dalam layanan.
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(){
}
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)
}
}
}
}]);