Kurs AngularJS #9 – Services

Services w Angularza tak w dużym skrócie pozwalają nam na dzielenie określonego kodu w zakresie całej naszej aplikacji. Dzięki temu możemy lepiej zorganizować i współdzielić nasz kod. Są one również ładowane tylko wtedy kiedy rzeczywiście z nich korzystamy, dzięki czemu możemy w ten sposób zoptymalizować działanie naszego projektu. Sam Angular oferuje kilka użytecznych usług takich jak $http ale w większości przypadków i tak będzie musiał tworzyć własne. Te wbudowane jak być może już zauważyłeś poprzedzone są prefiksem $.

Żeby używać ich w jakieś innej części naszego projektu tak jak to zwykle bywa wystarczy, że podamy którąś z usług jako zależność a DI zajmie się resztą. Przykładem może być chociażby usługa która będzie wyświetlała powiadomienia na stronie. Może być potrzebna w wielu przypadkach i najrozsądniejszym rozwiązaniem jest właśnie współdzielenie kodu który jest za to odpowiedzialny.

Jak widzisz stworzenie samej usługi to nic specjalnego. Możesz tworzyć je dla funkcjonalności które będą współdzielone przez twoją aplikację, jak już wspominałem. Wystarczy zwrócić funkcję bądź model który będzie reprezentował usługę w kontrolerze, komponencie, dyrektywie lub filtrze w którym będzie potrzebna. Zauważ więc, że od razu nie rejestrujesz samej usługi a jedynie funkcję która robi to po wywołaniu.

Usługi tak jak i inne obiekty w Angularowym świecie mogą mieć zdefiniowane zależności. Widać to zresztą na powyższym przykładzie i wygląda to dokładnie tak jak we wszystkich przypadkach które przerabialiśmy do tej pory.

Usługi możemy rejestrować również za pomocą $provide, o którym więcej powiemy w innej części, wewnątrz funkcji config() naszego modułu. Ta technika jest często używana w testach jednostkowych w celu mock outowania zależności. Nie znam niestety polskiego odpowiednika tego wyrażenia ale mocking ogólnie rzecz biorąc w testach polega na zastąpieniu obiektów które są w zależnościach realnymi obiektami które dostarczają odpowiednich funkcji po to, żeby rzeczywiście przetestować zachowanie testowanego obiektu.