Hãy chịu đựng với tôi ở đây. Tôi biết có những câu trả lời khác như: AngularJS: Service vs nhà cung cấp vs nhà máy
Tuy nhiên tôi vẫn không thể hiểu khi nào bạn sử dụng dịch vụ tại nhà máy.
Từ những gì tôi có thể nói với nhà máy thường được sử dụng để tạo các hàm "chung" có thể được gọi bởi nhiều Bộ điều khiển: Tạo các hàm điều khiển chung
Các tài liệu Angular dường như thích nhà máy hơn dịch vụ. Họ thậm chí còn đề cập đến "dịch vụ" khi họ sử dụng nhà máy thậm chí còn khó hiểu hơn! http://docs.angularjs.org/guide/dev_guide.service.creating_service
Vậy khi nào thì một người sẽ sử dụng dịch vụ?
Có điều gì đó chỉ có thể hoặc dễ dàng hơn được thực hiện với dịch vụ?
Có điều gì khác biệt xảy ra đằng sau hậu trường không? Hiệu suất / bộ nhớ khác nhau?
Đây là một ví dụ. Khác với phương pháp khai báo, chúng có vẻ giống hệt nhau và tôi không thể hiểu tại sao tôi lại làm cái này với cái kia. http://jsfiddle.net/uEpkE/
Cập nhật: Từ câu trả lời của Thomas, dường như ngụ ý rằng dịch vụ dành cho logic đơn giản hơn và nhà máy cho logic phức tạp hơn với các phương thức riêng tư, vì vậy tôi đã cập nhật mã fiddle bên dưới và dường như cả hai đều có thể hỗ trợ các chức năng riêng tư?
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()
];
}