В чем разница между factory и provider в AngularJS (на пальцах)

Как-то давно переводил статью habrahabr.ru/post/190342/. На практике, конечно, не всё пригождается, поэтому в рамках понижения порога вхождения в Ангуляр, объясню проще.Никаких фабрик в Ангуляре нет. Есть только провайдеры. Записываются так: app.provider ('$helloWorld', function () { return { world: 'World', $get: function ($hello) { return $hello + this.world; } } }); После этого Ангуляр создаст сервис из метода $get:

$helloWorld = function ($hello) { return $hello + this.world; } и его провайдер для настройки остальных параметров:

$helloWorldProvider = { world: 'World' } Провайдер мы используем для настройки сервиса (на стадии конфигурации):

app.config (function ($helloWorldProvider) { $helloWorldProvider.world = 'Piter'; }) Сам сервис — после запуска приложения:

app.controller ('MainCtrl', function ($scope, $helloWorld) { $scope.title = $helloWorld; // $hello + 'Piter' }); Предположим, что настройки нам не нужны:

app.provider ('$helloWorld', function () { return { $get: function ($hello) { return $hello + 'World'; } } }); То, что мы сейчас записали есть ни что иное как фабрика. То же самое можно записать так:

app.factory ('$helloWorld', function ($hello) { return $hello + 'World'; }); Разумеется, и в этом случае Ангуляр создаст $helloWorldProvider, только он будет без параметров — пустым.

Вывод: factory, service, value, constant — всего лишь синтаксический сахар для provider

P.S. $hello это просто какой-то наш сервис, взятый для примера:

app.factory ('$hello', function () { return 'Hello'; });

© Habrahabr.ru