Ответ 1
От Pawel Kozlowski есть отличный пост группы google:
https://groups.google.com/forum/#!msg/angular/hVrkvaHGOfc/idEaEctreMYJ
Цитата из Powel:
на самом деле $provision.provider, $provision.factory и $provision.service более или менее то же самое в том смысле, что все они чертежи/инструкции для создания экземпляров объекта (те экземпляры затем готовы для ввода в коллабораторы).
$offer.провайдер - самый простой способ регистрации чертежей, это позволяет вам иметь сложную функцию создания и параметры конфигурации.
$обеспечивает .factory - упрощенная версия $offer.provider, когда вы не нужно поддерживать параметры конфигурации, но все же хотите иметь более сложная логика создания.
$обеспечивает.сервис для случаев, когда вся логика создания кипит вплоть до вызова функции-конструктора.
Итак, в зависимости от сложности вашей логики построения вы бы выберите один из $offer.provider, $provision.factory и $provision.service но в итоге вы получите новый экземпляр.
Вот сопроводительная сценария для демонстрации (из потока): http://jsfiddle.net/pkozlowski_opensource/PxdSP/14/
И код:
var myApp = angular.module('myApp', []);
//service style, probably the simplest one
myApp.service('helloWorldFromService', function() {
this.sayHello = function() {
return "Hello, World!"
};
});
//factory style, more involved but more sophisticated
myApp.factory('helloWorldFromFactory', function() {
return {
sayHello: function() {
return "Hello, World!"
}
};
});
//provider style, full blown, configurable version
myApp.provider('helloWorld', function() {
this.name = 'Default';
this.$get = function() {
var name = this.name;
return {
sayHello: function() {
return "Hello, " + name + "!"
}
}
};
this.setName = function(name) {
this.name = name;
};
});
//hey, we can configure a provider!
myApp.config(function(helloWorldProvider){
helloWorldProvider.setName('World');
});
function MyCtrl($scope, helloWorld, helloWorldFromFactory, helloWorldFromService) {
$scope.hellos = [
helloWorld.sayHello(),
helloWorldFromFactory.sayHello(),
helloWorldFromService.sayHello()];
}