Angular to framework, który pozwala kompleksowo zająć się tworzeniem frontendu aplikacji webowej.
Implementacja kodu w tym frameworku jest całkowicie niezależna od kodowania po stronie backendu i w dużych projektach często zdarza się,
że praca ta jest wykonywana przez specjalistę frontendowca, który nie zna Javy.
Nie oznacza to jednak, że Javowiec nie może tworzyć frontendu w Angularze. Może i nawet powinien, jeśli chce być fullstackowcem na miarę
naszych czasów. Idąc tą drogą lub przynajmniej mając takie zainteresowania, ważne jest, aby właściwie podejść do tematu
i skupić się na poznaniu kilku kluczowych zasad.
Na pierwszy ogień idzie lista narzędzi wymaganych do współpracy z Angularem.
Zapoznaj się z nią, ale jeszcze niczego nie instaluj. Po prostu przywitaj się z narzędziami i ich nazwami. Instalację wykonasz za chwilę.
Co ważne nie musisz uczyć się tych narzędzi od deski do deski. Na tym etapie wystarczy, że poznasz podstawy.
-
nodejs - środowisko do budowania i uruchamiania aplikacji napisanych w Javascript.
Popularną komendą node'a, którą możesz kojarzyć, jest node.
Link: nodejs.org
-
npmjs - menadżer pakietów (instalowany razem z nodejs), który pozwala na instalowanie zależności wymaganych w naszym projekcie
(w dużym uproszczeniu możesz sobie go wyobrażać jako takiego Mavena dla Javascriptu).
Komendą uruchomieniową jest npm.
Link: npmjs.com
Pamiętaj, że link jest dodany tutaj poglądowo. Narzędzie jest instalowane razem z nodejs.
-
AngularCLI, czyli Angular Command Line Interface - narzędzie pozwalające na łatwe tworzenie i aktualizację projektów w Angularze i jak sama nazwa wskazuje, jest to narzędzie linii komend.
Komendą uruchomieniową jest ng i będziesz z niej często korzystał(a). AngularCLI posiada komendę ng serve,
którą udostępni Twój frontend na domyślnym porcie 4200, dzięki czemu zobaczysz go w przeglądarce bez uruchamiania serwera Spring Boot (wrócimy do tego)!
Link: github.com/angular/angular-cli
Link jest dodany poglądowo, ponieważ instalację narzędzia wykonasz za pomocą npm.
-
IDE pozwalające na wygodną implementację (do wyboru):
- Visual Studio Code - darmowe narzędzie posiadające pełno wtyczek i rozszerzeń, ale z naszych obserwacji wynika, że
jest to narzędzie mniej popularne, szczególnie wśród Javowców przyzwyczajonych do IntelliJ-a.
code.visualstudio.com
-
WebStorm - płatne, ale co najważniejsze oparte na IntelliJ (tak naprawdę jest to IntelliJ z dodatkowymi możliwościami).
Posiada miesięczny trial, a więc możesz go używać za darmo przez cały miesiąc.
WebStorm posiada wszystko to, czego używamy każdego dnia w pracy.
Nie trzeba szukać i instalować wtyczek.
jetbrains.com/webstorm
Możesz oczywiście używać dowolnego innego narzędzia, nawet swojego podstawowego IDE do programowania w Javie.
Pamiętaj jednak, że wymienione narzędzia dają naprawdę znaczne wsparcie w tworzeniu kodu. Wystarczy wspomnieć
o łatwości przechodzenia do metody Javascript (a w zasadzie do Typescript) bezpośrednio z edytowanego właśnie pliku html.
Tak samo klikając w nazwę stylu, od razu odwiedzamy odpowiedni plik ze stylami. Takich ułatwień jest oczywiście dużo więcej.
Z racji tego, że w pracy na co dzień korzystamy z WebStorma, w kursie również korzystamy z tego narzędzia, jednak nie ma to żadnego wpływu
na kod, który powstaje.
Instalacja
W celu przygotowania środowiska do pracy z Angularem wykonaj następujące kroki:
- Wejdź na stronę https://nodejs.org
i ściągnij node'a LTS:
- Zainstaluj ściągnięte narzędzie, przeklikując kolejne strony wizarda (niczego nie zmieniając).
- Po instalacji wpisz w linii komend node -v i jeśli wszystko poszło zgodnie z planem, zobaczysz
informację o wersji (w naszym przypadku na konsoli zostanie wypisane: v14.17.0).
- Instalator node'a wykonał również instalację narzędzia npm. Możesz to też sprawdzić, wpisując
w linii komend npm -v. Wersja npm będzie oczywiście inna niż narzędzia node.
Na przykład u nas jest to v6.14.13.
- Korzystając z narzędzia npm, instalujemy AngularCLI. Wystarczy wpisać poniższą komendę, a narzędzie zostanie ściągnięte
z repozytorium w internecie i zainstalowane na komputerze. Ustawienie -g oznacza instalację globalną, dzięki czemu każdy
z naszych projektów w dowolnym miejscu na komputerze będzie miał dostęp do AngularCLI. Tak więc uruchamiamy
polecenie npm install -g @angular/cli:
Na tym etapie interesuje nas tylko tyle, aby proces doszedł do końca oraz by wyświetlił podsumowanie o wykonanych instalacjach lub aktualizacjach:
Powyższe zdjęcie jest przykładowe, abyś wiedział(a), czego możesz się spodziewać. Liczby mogą różnić się od tych ze zdjęcia. Ważne jest, aby w trakcie
instalacji nie wystąpiły błędy, które doprowadzą do jej przerwania.
Appa Notka.
W przypadku gdy chcesz dowiedzieć się więcej o instalacji albo na przykład chciał(a)byś odinstalować istniejącą wersję AngularCLI,
zerknij do zwięzłej i przejrzystej dokumentacji na stronie:
github.com/angular/angular-cli
-
Zainstaluj narzędzie deweloperskie, w którym będziesz implementował(a) kod.
Polecamy WebStorm-a ze względu, że jest gotowy do użycia beż potrzeby instalowania dodatkowych wtyczek.
Poza tym przez miesiąc jest całkowicie darmowy, a po miesiącu możesz przesiąść się na darmowe narzędzie, np.
Visual Studio Code. Wtedy będziesz już wiedział(a), jakie masz potrzeby podczas tworzenia kodu w Angularze
i łatwiej Ci będzie wyszukać odpowiednie wtyczki do Visuala.
Stworzenie pierwszego projektu
Na początek mała uwaga. Ten rozdział jest przeznaczony dla wszystkich, których interesuje stworzenie własnego projektu całkowicie od zera.
Warto to zrobić w celach szkoleniowych, aby zaznajomić się z tym, jak to ogólnie działa.
W dalszych rozdziałach przejdziemy do projektu naszej aplikacji z kursu.
Nie wymaga ona generowania, ponieważ jej źródła są dostępne po wykupieniu pakietu i wystarczy je zaimportować oraz zbudować.
Narzędzie
AngularCli umożliwia łatwe tworzenie struktury nowego projektu.
Należy uruchomić poniższą komendę, a narzędzie zrobi wszystko za nas:
Struktura nowego projektu będzie wyglądać tak:
Teraz pozostało nam tylko zaserwować nową aplikację w systemie, tak aby była dostępna pod adresem url:
Wtedy pojawi się widok podobny do poniższego:
Oznacza to, że możemy zerknąć do przeglądarki, w której pojawi się nasza wygenerowana aplikacja:
Mamy szkielet prostej aplikacji w Angularze. Wszystko to osiągnęliśmy po uruchomieniu zaledwie kilku komend. Wow!
W tym miejscu zataczamy koło i wracamy do początku tego rozdziału, w którym wspominaliśmy, że
"Implementacja kodu w tym frameworku jest całkowicie niezależna od kodowania po stronie backendu".
Właśnie dlatego ściągałe(a)ś osobne narzędzie deweloperskie
(WebStorm) i z tego samego powodu jest Ci potrzebny
AngularCLI.
Angular ma to do siebie, że "lubi być postrzegany" jako framework niezwiązany z
żadną konkretną technologią backendową. Nie ma dla niego znaczenia czy po stronie backendu uruchmiony jest kod w Javie
(np. w Springu), czy też jest to kod C# lub dowolnym innym języku, czy frameworku.
To właśnie dlatego narzędzie
AngularCli posiada komendę
serve, która uruchomia serwer nasłuchujący na żywo
na zmiany wykonane w kodzie przez dewelopera (
Angular Live Development Server).
Appa Notka.
Dzięki Angular Live Development Server nie musisz odświeżać własnoręcznie widoku w przeglądarce po każdej zmianie w kodzie frontendu.
Wystarczy, że zmienisz coś w pliku (np. *.html albo *.ts) a widok w przeglądarce zostanie automatycznie przeładowany.
Import pierwszego projektu
Otworzymy teraz wygenerowany projekt w
WebStorm, który jest bardzo popularnym narzędziem do pracy z Angularem,
często wybieranym zarówno przez frontendowców, jak i deweloperów Java:
Tak będzie wyglądał nasz projekt otwarty w
WebStorm (tryb ciemny):
Struktura projektu
Plik
app.component.html zawiera cały widok wygenerowanego projektu. Możesz spokojnie
usunąć zawartość tego pliku, a następnie wprowadzić tam dowolny tekst, np. "Kurs Javappa".
Po zapisie zmian nowy widok zostanie automatycznie wyświetlony w przeglądarce.
Projekt Angular ma ściśle zdefiniowaną strukturę. Wszystkie pliki, które widzisz na zdjęciu, mają swoje konkretne przeznaczenie.
Kilka z nich musisz poznać od razu na początku swojej przygody z Angularem (pogrubieniem i kolorem
wyróżniliśmy te elementy, które są dla Ciebie najważniejsze i na które koniecznie musisz zwrócić uwagę):
-
environments
Zawiera wszystkie zależności, z których będzie korzystał nasz projekt (biblioteki i podprojekty).
To co znajduje się w tym katalogu jest silnie związane z plikiem package.json, w którym
znajdują się nazwy i wersje zależności.
-
src
Zawiera źródła naszego projektu (pliki html, typescript, css).
-
.editorconfig
Zapewnie nam kompatybilność ustawień (np. kodowanie, rozmiar wcięć, czy max. długość linii) miedzy różnymi edytorami.
-
angular.json
Główny plik konfiguracyjny, w którym możemy np. definiować ścieżki do plików ze stylami czy do plików javascript.
To w tym miejscu możemy zdefiniować prefix naszego projektu (prefix).
-
browserlist
Definiuje wersje przeglądrek, z którymi mają być kompatybilne źródła naszego projektu. W przypadku gdy użyjemy
rozwiązania niezgodnego z zapisanymi tu wersjami dostaniemy komunikat o błedzie podczas kompilacji.
-
karma.conf.js
Przechowuje konfigurację testów frontendowych naszych funkcjonalności.
-
package.json
Plik zawiera zależności wraz z zwersjami. Na ich podstawie dociągane są wymagane pliki z internetu wraz z
plikami powiązanymi. Tak jak pisaliśmy wcześniej, pliki są wgrywane do katalogu node_modules.
-
package-lock.json
Plik jest generowany gdy uruchomimy komendę npm install. Zawiera on informacje o naszych zależnościach.
Możemy tu znaleźć między innymi informacje o url, z którego dana zależność jest pobierana.
-
tsconfig.app.json
Tutaj mamy konfigurację typescripta dla aplikacji.
-
tsconfig.json
Konfigurację typescripta dla workspace'a (może on zawierać więcej niż jeden projekt/aplikację).
Bardzo ważną sekcją tego pliku jest compilerOptions, w któej możemy ustawiać parametry dotyczące
kompilacji kodu typescript.
-
tsconfig.spec.json
Konfiguracja typescripta dla testów frontendowych.
-
tslint.json
Zawiera reguły dotyczące składni naszego kodu, które pomagają utrzymać w nim porządek.
Struktura źródeł, czyli src
W tym katalogu będziemy tworzyć kod naszego projektu. Podstawowa struktura wygląda następująco (ponownie - pogrubieniem i kolorem
wyróżniliśmy te elementy, które są dla Ciebie najważniejsze i na które koniecznie musisz zwrócić uwagę):
-
app
Zawiera pliki html, typescript,i pliki ze stylami. W typowej aplikacji znajdują się tutaj jeszcze katalogi
z podziałem na komponenty, serwisy, klasy domenowe i inne istotne elementy.
Dla porównania katalog app aplikacji z kursu wygląda tak:
-
assets
Tutaj znajdują się pliki statyczne, na przykład grafiki.
-
environments
Przechowujemy tutaj ustawienia w zależności od trybu, w któym uruchamiamy aplikację (np. deweloperski lub produkcyjny).
Ustawienia między trybami mogą się różnić, stąd potrzebujemy dla nich osobnych plików.
-
index.html
Zawiera główny plik startowy aplikacji webowej. Tam są dąłaczane pliki ze stylami , javascriptwoe, ścieżki zewnętrznych źródeł.
Tam też w body strony znajdziesz tag <app-root>, pod którego Angular podstawia bieżący widok aplikacji.
-
main.ts
Wskazuje moduł, któy jest miejscem, od któego zaczyna się kompilacja kodu.
-
polyfills.ts
Plik konfiguracyjny zapewniający kompatybilność między przeglądarkami.
-
styles.css
Style dostępne w we wszystkich miejscach aplikacji. Mogą być nadpisywane przez style znajdujące się w
podkatalogach katalogu app.
-
test.ts
Przechowuje konfigurację uruchomieniową testów frontendowych.
Podstawowa architektura Angulara
Poznałe(a)ś już strukturę typowego projektu Angular, więc teraz przyszedł czas na zapoznanie się z podstawowymi
składowymi tego frameworka oraz tym jakie występują między nimi relacje.
Podstawową jednostką podziału Angulara jest moduł, który zawiera komponenty i serwisy. Może również zawierać inne moduły.
W komponencie bardzo często pojawiają się dyrektywy i oraz pipes. Komponent współpracuje bezpośrednio z widokiem z jednej strony
i z serwisem z drugiej. Serwis jest odpowiedzialny za nawiązanie komunikacji po REST Api z serwerem.
- Moduł
Każda aplikacja Angular ma przynajmniej jeden moduł, który nazywamy modułem głównym lub bazowym.
W naszych projektach znajduje się on w pliku app.module.ts.
W nim znajdują się informacje o tym jakich modułów, komponentów i serwisów używamy w aplikacji.
To tutaj "zaczyna się" aplikacja w Angularze.
- Komponent
Komponent współpracuje z widokiem html zdefiniowanym albo w postaci szablonu, albo (najczęściej) w osobnym pliku
html. W komponencie będziemy odwoływać się do elementów widoku, a także obsugiwać zdarzenia generowane w trakcie pracy
użytkownika z widokiem (np. kliknięcie przycisku, zapis formularza i wiele innych).
Podstawowym komponentem w Angularze jest AppComponent zdefiniowany w module bazowym.
Kolejno dodawane przez nas komponenty będą tworzyły drzewo komponentów, dla których rootem będzie AppComponent.
Appa Notka.
W Angularze każdy komponent musi być zadeklarowany w module. W przypadku gdy tego nie zrobimy,
otrzymamy błąd w konsoli i frontend aplikacji nie będzie dostępny.
- Serwis
Serwisy podobnie jak to miało miejsce w AngularJS, służą do wysyłania, odbierania i przetwarzania danych.
Stanowią one również główne miejsce wykonywania zadań autoryzacyjnych użytkowników.
Najczęściej w serwisie wysyłamy i odbieramy żądania http. W scenariuszu wysyłającym dane, serwis przyjmuje
od komponentu przygotowane obiekty, które następnie albo jeszcze obrabia i wysyła na serwer, albo od razu
wykonuje wysyłkę.
W scenariuszu, w którym dane są odbierane z serwera, serwis buduje obiekty domenowe na podstawie otrzymanych danych
i dostarcza je kontrolerowi do wyświetlenia.
Tak wygląda zestaw wspomnianych plików w projekcie z kursu: