Blog (23)
Komentarze (1.2k)
Recenzje (0)

6 powodów dla których warto poznać Angulara

@master6 powodów dla których warto poznać Angulara09.12.2017 21:30

Angular jest to frontendowy framework, służący do budowania stron określanych mianem single page application. W prostych słowach, cała mechanika strony ładowana jest na raz, po czym następuje już tylko wymiana samych danych z serwerem (o ile dana strona tego wymaga).

Dzięki takiemu rozwiązaniu, nie musimy w kółko przesyłać wspólnych partii kodu HTML (np.: menu główne) podczas nawigacji po stronie. Strona tego typu przypomina w konstrukcji aplikacje jakie znamy z telefonów komórkowych. Przykładem takiej witryny może być serwis transakcyjny mBanku (chociaż ten akurat nie jest napisany przy pomocy Angulara).

Wpis ten skierowany jest głównie do osób które mają do czynienia z pracą frontend dewelopera, z uwagi na poruszane kwestie techniczne. Postaram się przedstawić Wam powody, dla których po ponad roku czasu pracy z tym frameworkiem, uważam że jest on wart uwagi. Jeśli wcześniej pracowałeś chociażby z jQuery, to tym bardziej znajdziesz tutaj wiele odniesień jak pewne problemy w Angularze rozwiązuje się znacznie prościej, lub takowe w ogóle nie występują.

1. Manipulacja DOMem, system szablonów

To co pierwsze rzuca się w oczy, to sposób budowana strony (a w zasadzie komponentów) w Angularze. Dostajemy do dyspozycji system szablonów (bazujący na HTMLu), wyposażony w metody do wyświetlania danych oraz instrukcje sterujące (jak IF, ELSE, SWITCH, FOR). Zatem jeśli zachodzi potrzeba wyświetlenia bloku w zależności od stanu pewnej zmiennej, jest to bardzo proste i przyjemne:

<div *ngIf="notifications > 0">
    Masz {{ notifications }} nowych powiadomień
</div>

To pewnie kwestia indywidualnego podejścia do czytelności kodu, nie miej nie zachodzi tutaj potrzeba wstrzykiwania JSa w kod HTML, nie musimy się gimnastykować z .append() czy też przełączaniem klasy CSS.

Warto też nadmienić, że taki angularowy IF, całkowicie wyrzuca z drzewka DOM dany fragment kodu, jeśli warunek nie jest spełniony. Ma to swoje plusy jeśli chodzi o wydajność oraz podejście do pisania styli.

2. Data binding

Data binding to mechanizm odpowiedzialny za powiązanie wartości zmiennej z miejscem w kodzie HTML, w którym ta zmienna została użyta. W praktyce oznacza to, że jakakolwiek modyfikacja zmiennej występującej w szablonie, pociąga za sobą automatyczne odświeżenie tej wartości w oknie przeglądarki.

Odnosząc się do przykładu z punktu wyżej, jeśli zmienna notifications początkowo posiadała wartość 0 i wykonamy taki kod:

this.notifications = 4;

to spowoduje to samoczynne wstrzyknięcie znacznika

w stronę, wraz z stosownym komunikatem w jego wnętrzu.

Zatem jeśli nasza aplikacja komunikuje się z serwerem za pomocą API, wówczas po odebraniu danych, wystarczy je przypisać do zmiennych użytych w szablonie a zawartość strony dostosuje się samoistnie. Wyobraźcie sobie ile trzeba by się nagimnastykować w jQuery (że o czystym JSie nie wspomnę) aby osiągnąć coś takiego.

Data binding działa również w drugą stronę, tj. potrafi synchronizować zawartość zmiennej z polem tekstowym na stronie. Synchronizacja taka może być zarówno jednostronna (jak w w/w przykładzie), jak i dwustronna.

3. TypeScript, kompilacja

W Angularze mechanikę aplikacji piszemy w języku TypeScript. Jest to modyfikacja JavaScriptu dodająca głównie typowanie zmiennych, oraz pewne elementy ES6, których normalnie użyć byśmy nie mogli z uwagi na wsparcie dla starszych przeglądarek (np.: funkcje strzałkowe, klasy). Całość, aby mogła być uruchomiona w przeglądarce, jest kompilowana do JavaScriptu zgodnego z zadaną wersja ECMAScript (zwykle w wersji 5).

Proces kompilacji jest pewnym minusem, nie miej w dobie pre procesorów CSS nie jest też niczym nowym. Z drugiej jednak strony, otwiera przed nami sporo nowych możliwości jak właśnie elementy ES6 oraz typowanie.

Określanie typów zmiennych pozwala na zapanowanie nad kodem i łatwiejsze wyszukiwanie ewentualnych błędów już na etapie kompilacji. Jeśli spróbujemy przypisać wartość typu string do zmiennej typu number, kompilator nam na to nie pozwoli. W bardziej rozległych projektach, gdzie następuje wymiana danych między serwisami, API, komponentami, jest to nieoceniony mechanizm.

4. Kompaktowanie, podział na moduły

Następstwem procesu kompilacji jest wyplucie kilku plików wynikowych (JS oraz CSS), w skład których wchodzi cała nasza aplikacja. Ma to ogromny wpływ na czas ładowania strony, gdyż liczba requestów jest ograniczona do minimum (nie licząc zasobów graficznych). Same poruszanie się po tak przygotowanej stronie również jest błyskawiczne, gdyż proces nawigacji odbywa się po stronie klienta, a nie polega na wysłaniu żądania do serwera. Oczywiście na dane pobierane AJAXem przyjdzie nam dalej poczekać.

Wejściowe ładowanie sporej wielkości serwisu (15+ modułów, 100+ komponentów)
Wejściowe ładowanie sporej wielkości serwisu (15+ modułów, 100+ komponentów)

W przypadku sporych aplikacji, mamy możliwość podzielenia całego kodu na moduły. Wówczas, takowe ładowane są dopiero wtedy gdy zajdzie taka potrzeba - użytkownik przejdzie na podstronę tego wymagającą.

5. Dependiency injection

Angular wykorzystuje i umożliwia nam bardzo łatwe korzystanie z tego wzorca projektowego. Wstrzykiwanie zależności odbywa się poprzez konstruktor klasy komponentu/serwisu.

Wstrzykiwanymi obiektami są w głównej mierze serwisy które odpowiadają za wymianę danych z zewnętrznym API. Nie mniej nie jesteśmy ograniczeni tylko do tego, wszystko zależne od charakteru aplikacji.

6. RxJS

Reactive Extensions for JavaScript, bo tak brzmi pełna nazwa biblioteki, jest zespołem narzędzi umożliwiającym nam programowanie asynchroniczne oraz oparte na zdarzeniach. Jest to oczywiście zupełnie niezależna biblioteka, i nic nie stoi na przeszkodzie aby korzystać z niej w zewnętrznych projektach. To co wiąże ją z Angularem, to to, że wszystkie asynchroniczne mechanizmy Angulara korzystają z RxJSa i wystawiają nam obiekty jego typu (Observable - taki krewny Promise'a).

Mówiąc bardziej obrazowo, RxJS pozwala podpiąć się pod pewne asynchroniczne źródło danych (np.: żądanie HTTP) i subskrybować dane które z niego wychodzą (wykonać zadaną funkcję gdy to nastąpi). Po drodze jednak, możemy modyfikować przepływ tych danych, spinając ze sobą jedną bądź więcej funkcji modyfikujących (odniesienie do programowanie funkcyjnego będzie tutaj bardzo na miejscu).

Elastyczność w modyfikowaniu strumieni danych jest ogromna i znajdziemy tu praktycznie wszystko od podstawowych operacji filtrowania, mapowania a skończywszy na przełączeniu strumieni, łączeniu czy oczekiwaniu na kilka niezależnych.

Drobny przykład tego, jak z pozoru skomplikowane operacje można dzięki RxJS zawrzeć dosłownie w kilku liniach kodu:

this.route.params
    .pipe(
        map((params: Params) => params['id']),
        switchMap((id: number) => this.itemsService.get(id))
    )
    .subscribe(
        (items: Item[]) => this.items = items	
    );

Podłączamy się pod strumień parametrów adresu URL, oczekując na zmianę. W pierwszej fazie wyłuskujemy tylko parametr który nas interesuje (map), przełączamy się na kolejny strumień który odpytuje API naszego serwisu podając mu wcześniej pobrane ID (switchMap). W końcu, gdy dostaniemy odpowiedź, przypisujemy dane do zmiennej - które z kolei dzięki data binding od razu są wstrzykiwane w widok.

Wadą RxJSa jest jednak to że początkowo trudno go zrozumieć, pojąć przepływ danych - osobiście troszkę się z tym borykałem.

#tylkoangular

Zaintrygowany? Super! Mam nadzieję że udało mi się Twoją osobę co najmniej zaciekawić, a najlepiej pchnąć do działania, w poznawaniu zagadnień związanych z single page application.

Sam Angular jest obecnie zdobywającym coraz to większą popularność frameworkiem. Wiele innych rozwiązań programistycznych korzysta również z Angulara, jak np.: NativeScript, będący frameworkiem służącym do pisania aplikacji na systemy Android oraz iOS. Zatem benefity płynące z poznania tej techniki są naprawdę szerokie.

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.