...

воскресенье, 4 мая 2014 г.

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

Как-то давно переводил статью http://ift.tt/1abnTLY. На практике, конечно, не всё пригождается, поэтому в рамках понижения порога вхождения в Ангуляр, объясню проще.



Никаких фабрик в Ангуляре нет. Есть только провайдеры. Записываются так:

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';
});


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий