od Podstaw
6 godz. 45 min · Angular · Full-stack i Programowanie
Mateusz KuleszaSenior Software Developer, Konsultant, TrenerPierwsze dwa działy kursu są idealne dla osób które rozpoczynają swoją przygodę z Angularem i stanowią wprowadzenie do frameworka. Zaczynamy od prostych przykładów, gdzie budujemy formularz zapisu na newsletter. Jest to przykład pozornie prosty, ale dzięki łatwości z jaką Angular wprowadza dynamizm, manipulacje wyglądem a nawet animacje wcale taki nie będzie. Zobaczysz, że nawet prosty przykład możemy zamienić w interaktywny, dynamiczny interfejs, który wciągnie użytkownika!
W kolejnych sekcjach kursu nie robimy prostych ćwiczeń, ale krok po kroku budujemy prawdziwy projekt. Jeśli marzyło Ci się stworzenie i opubliklowanie eleganckiej strony WWW lub aplikacji z Twoim CV oraz listą projektów, to nie musisz marzyć dalej. Możesz podążać krok po kroku i z każdą lekcją budować własną stronę portfolio. Będziesz zaskoczony, że z podstawową znajomością JavaScript, HTML i CSS zaczniesz błyskawicznie tworzyć złożone eleganckie i interaktywne interfejsy użytkownika.
W kursie stawiam na produktywność. Koniec że żmudnym klepaniem setek lini HTML i CSS, koniec z zawiłym kodem jQuery. Wykorzystując bibliotekę Bootstrap i modyfikując gotowe elementy HTML możemy skupić się na tym co najważniejsze. Zobaczysz jak wykorzystać interpolacje i wiązania by struktura HTML i CSS zmieniała się sama po każdej akcji użytkownika. Dzięki poprawnemu użyciu mechanizmów Angulara, mozolna praca z DOM, którą znasz np. z jQuery staje się zbędna. Angular renderuje interfejs za Ciebie - prosto z danych które umieścisz w komponentach.
Już w pierwszych sekcjach kursu dowiesz się jak wykorzystać moduł formularzy w praktyce, by tworzyć automatyczne dynamicznie generowany formularze i pobierać z nich dane. Dowiesz się także jak znając wyłącznie podstawy JavaScript połączyć naszą stronę portfolio z serwerem i pobrać pliki JSON, w tym nasze projekty, opisy i zdjęcia ze zdalnego serwera!
Podczas pracy nad Twoim portfolio nie tylko poznasz podstawy pracy z angularem, ale w kilku lekcjach zagłębimy się na chwilę w samo działanie Angulara. O ile jest to wiedza zaawansowana, tak znajomość mechanizmów wykrywania zmian już na samym początku pracy z Angularem da Ci lepsze zrozumienie tego narzędzia i pozwoli pisać kod który będzie nie tylko prosty i czytelny ale też będzie działał błyskawicznie. W tym kursie nie tylko pokazuje jak czegoś użyć, ale kiedy, dlaczego oraz jak to działa od środka. Nawet jeśli Angular nie jest dla Ciebie nowością - ten kurs da Ci głębsze zrozumienie jego koncepcji.
Ten kurs przygotowałem dla osób początkujących w Angularze, ale w taki sposób by mógł on służyć także do powtórzenia, uporządkowania wiedzy czy uzupełnieniu braków dla osób które pracowały już z Angularem. Jeśli jesteś front-end developerem, ale jeszcze nie miałeś okazji zapoznać się z Angular, lub chcesz uzupełnić szczątkową wiedzę o fundamenty - to jest kurs dla Ciebie! Dodatkowo, jeśli zaczynasz przygodę z front-end ale masz już podstawy HTML i JavaScript, to kolejny ważny krok na Twojej drodze do kariery!
Angular 10+
W poprzednich lekcjach udało nam się z
naszej strony portfolio dodać nawigację typu single player Application dzięki
której możemy zmieniać przełączać ekrany bez potrzeby ładowania z serwera całej
strony co znacznie przyśpiesza też pracę aplikacji.
Jednak żeby to była taka całkowicie pełnoprawną aplikacja typu właśnie single
Page tutaj musimy jakby jeszcze jedną ważną funkcjonalność.
Jaki jest problem że jeśli włączam do strony to faktycznie bez ładowania z
serwera się przygotowują aczkolwiek wszystkie dane które mamy
zawarte wszystkie operacje na danych robimy.
Te dane muszą być z końca ładowane i one niestety ładują się raz ze stroną czyli
powiedzmy nowe projekty dołączają nowe projekty do naszych
ostatnio powiedzmy dodanych projektów to musielibyśmy znowu zmienić całą
aplikację kopiować aplikacje i aby użytkownik zobaczył te wyniki musiałby
znowu odświeżyć i załadować całą aplikację wraz z nowymi danymi.
Co możemy z tym zrobić.
Możemy nie tylko podzielić pod ekrany i
zmieniać ekrany dynamicznie ale także na poszczególnych
ekranach dane które użytkownikowi wyświetlane.
Możemy także zamontować osobno.
Dzięki temu użytkownik nie będzie musiał
wyjść ze strony tylko wystarczy że pliki np.
odświeża lub przełącza ekran
i nasza aplikacja pobierze same dane i podbili ekran.
Na podstawie samych danych nie musimy już
całego HTML a jeszcze raz z serwera wysyłać przygotowałem na repozytorium.
W załączonych plikach do projektu przygotowanej w katalogu Asset
taki katalog projekt i projekt zawiera listę projektów w postaci pliku.
Mam tutaj wszystkie projekty muszą pobrać
jako jeden plik ale także zobaczyć sobie szczegóły szczególnego projektu.
No to możemy sobie pobrać poszczególne plik Jackson gdzie potem IT
konkretnego projektu możemy dostać się do właśnie takiego pliku czasem który opisuje
twój obrazek i wszystkie informacje na temat jednego projektu.
Mamy też tutaj zdjęcia żeby dowiodły nowe
projekty można było także ciągnąć dynamiczne nowe zdjęcia.
Chodzi o to żeby nie trzeba wszystkie ładować za każdego na starcie tylko już
można na żądanie załadować tylko te dane które są potrzebne i żebyśmy mogli ładować
dane od nowa załadować nowe dane bez potrzeby zmiany w ogóle kodu.
Angola będzie mógł dołożyć dodatkowe dane i zmieniając ekrany lub klikając przycisk
będziemy mogli sobie te dane załadować od nowa lub np.
dodać nowe dane których wcześniej na stronie nie było.
Przejdę do naszej zakładki z projektami czyli strona projekty
i może od listy projektów jak powinna w poprzednich lekcjach tą listę projektów.
Ja dodałem tutaj całą w tym pliku
właśnie niej wszelkie projekty kilka i dodałem bo do pańskich projektów w tym
miejscu spowolnił ładowanie całego akumulatora.
To co chcemy zrobić chcemy te projekty stąd zupełnie jak by usunąć tych danych.
Tu nie będzie pustą tablicę teraz też przesłane do góry było łatwiej OK.
I teraz na początku nie ma.
Jeśli chcę te dane pobrać to potrzebuję specjalnego narzędzia do
tego potrzebuję klienta HTTP czyli HTTP to jest H.
Tp klient może importować mi nie podpowiada za
bardzo to będzie w pakiecie Angola Common http.
Czyli robię import from Angola Common http.
Jak to wpisze już to później powinien to zeskanować i podpowiadać tutaj żarówka też
żarówka prawym Fix i dodać sobie tutaj import.
Jeśli jak spróbuje to w ten sposób uruchomić to to jeszcze nie zadziała.
Jeżeli do projektów projekty przestały
działać i mamy błąd ten dość istotny to już on nie może znaleźć HCP klienta.
Poprosiłam żeby mi właśnie dał klient w
ten sam sposób w których chciałam żeby dawał mi router.
Jak pamiętasz router był tutaj na samym początku dołączony do importu.
Tu jest nasz absurd model który zawiera router moduł dzięki temu że ten moduł z
tymi wszystkimi rzeczami jest podpisany do projektu.
Ja mogę gdziekolwiek chcę tych różnych
usług dostarczać jakiejś funkcjonalności tych usług.
Mogę korzystać po prostu gdzie chcę.
Tutaj w tym naszym projekcie
żeby przez HCP klienta to muszę do naszego modułu
dodać jeszcze jeden podmiot HTTP klient moduł który importuje
dokładnie z tego samego źródła http: klient.
Jak to sobie dodamy to teraz powinno to nam już działać bez błędu.
Mogę przejść do projektów aczkolwiek jak widzisz dalej nie ma danych
jest tu pusto więc to muszę teraz zrobić muszę wykonać
uczył przyszły HTTP klient modułu muszę wykonać zapytanie http.
I teraz jak to się dzieje spróbujmy tutaj w tym miejscu.
Czyli jak na razie może komentuje tylko to z kategorii to za chwilę się tym zajmiemy.
Na razie wszystkie produkty czyli dysk HTTP to słówko private public
protektorat któregokolwiek użyjemy to wtedy to ta zmienna trafia do Death.
Nie muszę wtedy przepisywać tego ręcznie
do FIS HTTP i mam metodę HTTP tak jak Get post punk Patriot.
My na razie znamy przegięcie bo chce
pobrać zawartość pliku nie chce wysyłać jej nigdzie.
I mamy tutaj String i tam zobaczymy gdzie się kryją to nasze
właśnie dane produktu to jest katalog Asseco.
Zobaczmy ścieżkę do tego pliku.
Asseco Projects Project Jackson czyli tutaj spróbuje wpisać projekt
Project Jackson i to w katalogu Asseco również podam tutaj pełną ścieżkę.
Cały katalog zasad jest dostępny tutaj z tego naszego serwera deweloperskiego więc
mogę Abdullaha serwować ale mógł zrobić też inne pliki.
Wykorzystałem żeby serwować sobie
plik Project i teraz tą całą ścieżkę Chcę umieścić tutaj w pierwszym parametrem to
jest URL gdzie się znajdzie jaki masz plik lub w jakiś serwer dynamiczne np.
not Java albo PHP który takie pliki może generować dynamicznie.
To też może być dynamiczny jakiś adres API
nie musi być to plik my zaczniemy z plikiem.
Mamy też opcje mogę tu ustawić nagłówki
mogą dodatkowe parametry mogę też wstawić Jakie odpowiedzi się spodziewam.
Domyślnie jest to Jackson więc na razie nie będę tych opcji zmieniał
sobie to w ten sposób i teraz jeśli tak napiszemy w ten sposób
funkcja Inside wykona getta i moglibyśmy się spodziewać praktykowane
na projekty to zobaczymy tutaj reguła do serwera.
Ale tu nie ma ktoś dodatkowo sprawdza login request.
Jeszcze raz przejdę powiedzmy do Home z Home.
Przejdę jeszcze do projektów jak będziesz mieć.
A to dlatego że ten http.
Jak się przyjrzymy to nie zwraca wyników tylko zwraca tzw.
Observer bo obiekt który reprezentuje przyszłe wyniki ale jeszcze ich nie ma.
Czyli muszę sobie to do zmiennej.
Nazwę to Response obiekt który obserwuje
czeka na pojawienie się odpowiedzi i właściwie tej odpowiedzi nie dostaniemy
bo zapytanie wysyła Office leniwe nieaktywne on dopiero czeka.
Czy ktoś tych danych potrzebuje
lub jak ktoś się zgłosi on dopiero pyta ok wysyłam zapytań na serwer dopiero są
potrzebne żeby niepotrzebnie robić testów których nie potrzebujemy.
I teraz tak Request na serwer tak naprawdę może skończyć się na trzy sposoby.
I tutaj może mogę pójść od razu przed funkcja która dostanie wynik.
To w ten sposób.
Jak widzisz nasze projekty się tu pojawiły.
Stał się ściągnięte z serwera
aczkolwiek prawidłowe podejście było obsłużyć to w ten sposób
czyli obsłużyć funkcję next to mamy wtedy nasze projekty.
Wypadałoby także obsłużyć funkcję error
jeśli coś pójdzie nie tak i jeśli nie ma pliku nie ma nie możesz z serwerem
połączyć to warto taki błąd rozpoznać i jakoś użytkownikowi ten błąd wyświetlić.
Tu w dobie konsol czyli błąd lub sukces kiedy mamy projekt czyjś ma poprawny URL.
Serwer działa to mamy projekty.
Jeśli mam błąd czy powiedzmy robię jakieś literówki.
404 nie znaleziono pliku i dostajemy obiekt typu HTTP error response.
Status Text na czyli mogę na przykład z tego grona pobrać sobie status tekst np.
funt i gdzieś na pliku tutaj naszym
kompanem Message czyli komunikat dla użytkownika
i tu tej ustawy jest tak że Message to jest powiedzmy błąd.
Niespodziewany błąd
i komunikat błędu no fakt na przykład coś takiego może mieć
jakiś ważny komunikat możemy wybrać dane zbierane przez serwer.
Tu jest dowolność tego jak te błędy chcemy obsłużyć.
Natomiast same projekty tutaj co możemy zrobić to są po prostu lista projektów.
To ja mogę to tutaj Rise and Projects po prostu przypisać sobie
wynik z serwera i krzyczy na mnie bo typy się nie zgadzają
dlatego że dane z serwera są typu obiekt Object.
Tutaj mamy reset Project nie wiadomo jaki typ więc mógłbym dać skrypt nowe typy.
Ja po prostu powiem na razie że jest to.
I ten błąd tam znika i jakkolwiek nie jest
to najlepsze rozwiązanie byłoby faktycznie opisać w krypcie.
Co to jest.
Ale na razie zostawię w ten sposób byś
mógł skupić się na pobieranie danych HTTP do typów wrócimy później.
Czyli mamy tak tutaj mamy listę projektów
mamy Message i ponieważ w HTML u tego komponentu czyli przejdź do Projects HTML
to mamy tutaj gdzieś listę właśnie naszych danych projektów jest na chwilkę
przełączyć na ostatnie projekty żeby wszystkie wyświetlić.
I tu gdzieś jeszcze powiedzmy w tym miejscu umieszcza dodatkowo
komunikat nasz czyli jeśli mamy jakiś Message to akapit.
Jakiś błąd wystąpi wyświetla taki komunikat z błędem serwera.
Nie udało się pobrać produktów
i teraz takie produkty się teraz załadowane
OK i już ich bardzo dużo dużo więcej było
wcześniej bo teraz możemy je załadować bez osobnego pliku.
Brakuje widzę parę obrazków
ale widzę że produkty się załadowany i teraz moglibyśmy np.
je prowadzić.
Czyli jeszcze wrócę do filtra.
Czyli musimy teraz w filtr zastosować po pobraniu produktów czy jak
produkty się załadowany to wasz kolejny KOD chce wykonać.
Nie mogę w tym miejscu zrobić filtrowania
kategorii dlatego że ten kod wykona się najpierw a dopiero potem danych z serwera
wykona się ta funkcja Next więc nie chcemy.
Operacja tych danych robić no to niestety
musimy to zrobić dopiero po tym jak teraz są dostępne.
Czyli powiedzmy sobie zrobienie w razie pustą kategorię
co nam powinno filtrowanie te wszystkie produkty jak jeszcze produkty pojawiają
się chwilkę później jest ich dużo się ładują więc mogę np.
jeszcze dołożyć sobie powiedzmy jakiś Spider czyli jeszcze w HTML u.
Dodam w tym miejscu gdzieś dodatkowy element i powiem go muszę jeśli.
I jeśli flaga logik aktywna się na to wyświetla dodatkowe lody.
I dodam iż dodatkową zmienną tutaj w Polsce.
I co możemy zrobić
przed pobraniem danych z serwera czyli przed sklepem robię teatru.
A jak to się zakończy.
Tutaj może odbić się od dna forsę tylko zwrócił uwagę że lobbing może być tutaj
mamy błąd to też trzeba by lobbing zakończyć też tutaj.
Jeszcze trzecią opcję oprócz Next czyli
następne dane sukces mamy error czyli błąd.
Mamy też komplet i komplet mówi nam o tym
że nieważne czy to był sukces czy był error po prostu to się zakończyło.
Ja mogę na przykład pewne rzeczy też wyłączać.
Nieważne czy był sukces czy error to mogę na końcu zakończyć to i na przykład
wyłączyć lider w jednym miejscu tego kodu publikować dwa razy
jeszcze spróbuję tak jakbyśmy wcześniej pobrać to z URL a raz na starcie
w tym miejscu ten nasz tak a potem produkt załadowane to będziemy
mogli już obserwować ten URL a później w ten sposób
tak naprawdę ostatecznie musimy specjalnie do zmiennej
przechodzę przepisywać bo to zwraca nam od razu obiekt obserwacji więc mógłby jakby
tego słupskiej bo od razu też dołączyć i w ten sposób słuchać mamy tak.
Krok po kroku
obsługę zapytania HTTP czyli włączamy Landing będzie wyświetlany
znaczek ładowania przygotowujemy Request ale jeszcze go nie wysyłamy.
Dopiero Słupsk próbując się aktywuje ten obszar ale dopiero wtedy wysyłamy request.
I funkcja się kończy
dopiero za chwilę dane przyjdą z serwera i dopiero wtedy wykonuje się funkcje Next.
Mogę załadować te moje dane
mogę zobaczyć jaka kategoria jest aktywna po filtrowanie i coś poszło nie tak.
No to wyświetla wtedy błąd i na końcu zachowam logikę.
W ten sposób zobaczymy jak to zadziała.
Na początku ładują się tutaj wszystkie
bardzo dużo i się ładuje ale przyłączając mogę sobie ofiarować
tylko te które potrzebuję i tam są dynamicznie z serwera ładowane.
Ok moglibyśmy na przykład tutaj pobrać wszystkie produkty od razu to miał już np.
cały ten kod umieścić tutaj w ratingu dziś jest mniejsze parametr zmieni się tak
to mogliśmy na przykład tutaj dopisać tak jako parametr i serwer na to pozwalał.
Niestety mamy tylko zwykły plik
a przed serwer lub baza danych mogą publikować wyniki.
I żeby jeszcze bardziej zoptymalizować
naszą aplikację to przed serwer wysłał by z każdym kliknięciem tylko te projekty
które mają określone tutaj tak określoną kategorię.
Czyli moglibyśmy właściwie uzależnić to
jakie dane pobieramy i kiedy pobieramy od konkretnej akcji użytkownika przycisku np.
albo od przekazania konkretnego parametru w URL w ringu
spróbuje coś podobnego zrobić także w zakładce nie projekt tylko
w zakładce z pojedynczym projektem projekt Times i ta sama zasada z tym że tutaj ta
pierwsza rzecz potrzebujemy HTTP klient czyli HTTP HTTP klient.
I tutaj pamiętasz za zakażonych przez zmień URL.
Ta funkcja która przekazuje odpowiednie
parametry i my poprzednio robiliśmy tak że te wszystkie projekty znów to załadowane
musiałem załadować aby wszystkie projekty tylko po to żeby jeden wyświetlić.
No to troszkę marnotrawstwo.
Więc zamiast tego zamiast trzymać cały
czas projekty te wszystkie załadowane do komponentu to ja zrobię coś takiego że
jeśli zmieni się parametr potrzebujemy tylko tego parametru tutaj Project ID.
Jeśli zmieni się projekt ID to za każdym razem gdy dostajemy nowy
projekt będę chciał zrobić nowy Request serwera czyli dysk HTTP
GET to musi być ścieżka do naszych danych projektów czyli do asset.
To Asset projects czyli http.
Adresu podawać tylko końcówkę podać więc też teoretycznie zadziałało.
Po prostu coś takiego Asseco Projects.
Katalog Thales.
Użyj specjalnych back tight czyli
niezwykły cudzysłów taki pochyłej koło jedynki na klawiaturze pochyłej cudzysłów.
Dzięki temu mogę tu w tekstach wprowadzić
Project ID czyli zmienne mogą użyć w środku zmiennej nazwie i dopisze jeszcze.
Czy będziesz wybierał który plik chcemy załadować.
Zależnie od tego
który tutaj URL który mamy URL i znowu żeby to uruchomić musimy zawsze
pamiętać osób skrajnie i znowu przekaże swoje metody Next.
Jeśli chcemy sukcesu obsłużyć to być nasz
projekt i mogę go przypisać teraz do Death projekt
to się równa projekt czyli projekt ten który przyszedł z serwera
wpisujemy do zmiennej projektu ale dopiero za chwilę się pojawią.
Mogę coś jeszcze pokonać i ten błąd obsłużyć.
Dobra praktyka żeby też napisać ten kod obsługi błędu Error.
I tutaj będzie podobnie.
Robimy to w projektach czyli powiedzmy miał też jakiś Message aneks.
ERROR.
Coś takiego też
tutaj mamy jeszcze i dodam nam jeszcze tutaj String tłusty String message.
Mógł ten błąd wyświetlić i teraz szybko HTML.
Project detale HTML tu jest mały problem bo zobaczyć się z
pobytu uruchomić to na starcie ten projekt jest tutaj.
Czyli jak próbuje wejść do któregoś
projektu to zobaczymy że nie można odwołać.
To będzie błąd mówiący nam że próbujemy wyświetlić coś czego nie ma.
Więc znowu ja tu sobie mogę zrobić jakiś lobbing.
Może też sobie skupiłem stąd jakiś lobbing i w trakcie gdy czekamy na te dane gdy ich
jeszcze nie ma mogą użytkownikowi pokazać właśnie folder.
Natomiast wszystkie inne dane tutaj
wszystkie nasze informacje o naszym projekcie wszędzie nie mamy tutaj
właśnie jakiejkolwiek informacji o projekcie.
To wszystko musimy pochować te wszystkie sekcje muszą pochować
żeby ich nie próbować wyświetlić dopóki nie ma danych bo to spowalnia masę błędów.
Jeszcze dołożyli ok i teraz całą tę sekcję ukryje
tak długo jak długo nie mamy danych czyli sprawdzimy czy jest projekt.
I dopóki ten projekt się nie pojawi dopóty
będzie nadal ta cała sekcja i nie będzie tak samo.
Ta sekcja i ta sekcja one mogą czekać aż nasz projekt się załamuje.
Natomiast ten nasz cały lud mógł
powiedzieć NG i może powiedzieć lub nie projekt
albo zdobyć specjalny login żebyśmy faktycznie mieli troszkę większy porządek
niż muszą ukrywać te elementy HTML a które jeszcze nie mają danych które czekają na
dane żeby się pojawią żeby dopiero wtedy
odpowiednie elementy segmenty HTML wyświetlić nie wcześniej żeby żebyśmy nie
mieli błędów że brakuje na stronie w HTML u jakichś danych.
Pamiętasz mogłeś kupić też żeby ten nośnik np.
schować w momencie gdy to się zakończy.
Pamiętaj że jak strzałem specjalnie takie funkcji Arrow ang.
Shields próbuje w ten sposób ten DNS może być uruchomiony wewnątrz tego obiektu.
I ten zapis będzie wskazywał na zły obiekt.
Natomiast tutaj strzałka ma zawsze pewność że te lisy których
używasz wskazują zawsze na komponent w którym jesteśmy więc jest to
zawsze troszkę bezpieczniejszy sposób przypisania tych danych
ok czyli wysyłamy Request za każdym razem jak się zmienia ile
dostał link do tego artykułu przed Request em wysyłamy Request
ja po wyniki albo error in zdarzenie jak odpowiedź dostaliśmy poprawną czy nie
wyłącza później lider bo już tam nie jest potrzebne.
I teraz to jeszcze testujemy
jedna strona główną ładuje sobie całość od nowa żebyśmy mieli
wszystko na świeżo w zakładce Network wyłącza cóż żeby te
wszystkie zapamiętane wcześniej wyniki się znowu musiał pobrać na pewno od nowa z
serwera żeby nie były zapisane w przeglądarce
i za symuluje bardzo wolne połączenie internetowe czyli slot 3G
i czas przełączania się pomiędzy tymi ekranami powiedzmy tutaj Home i Abbott
to będzie się działo natychmiastowo bo nawet nie czekamy.
Dane są od razu w pamięci jeśli przyłączy się natomiast do projektów
to mamy bardzo wolny internet a skumulowane to mlode
i on dopiero się ściągnie dane dopiero wtedy wyświetla chowa logo.
Jeśli wejdzie w którykolwiek z produktów to to samo.
Mamy dane które są.
Tam od razu a dane które musimy poczekać to czekamy by się później.
Oczywiście obrazki są największe ładują
się najdłużej więc obrazki dopiero zobaczymy za chwilkę.
Już w ten sposób mamy taką prawdziwą
Singapore Application czyli dzięki temu że podajemy na początku całego regulatora
to możemy bardzo szybko później przełączać się pomiędzy ekranami nie musimy czekać na
przygotowanie całej strony ale dodatkowo dzięki temu że zawartość
tych stron sama treść nie jest w HTML tylko jako pliki są te nie
muszę całej strony jeszcze raz rekompensować wysyłać otwierać Mullera.
Mogę ten sam HTML te same szablony wykorzystać ponownie i mogę np.
różne dane różne projekty tutaj wyświetlić w tym
samym panelu po prostu układając inny plik.
Za każdym razem i to nam przyśpiesza
aplikacje bo nie podajemy wszystkich danych i musimy od razu ładować.
Moglibyśmy tylko te dane ładować kiedy potrzeba i jeśli chcemy dane zaktualizować
chcemy przed nową aktualizacją stronę wrzucić to znowu ją
musimy tutaj jeszcze raz kombinować wysłać na serwer Mullera.
Miejmy tylko pliki Jackson i osoba
korzystająca z tego projektu przechodząc pomiędzy składkami zaczyna zakładu.
Nową wersję tego pliku z nowymi danymi więc jakby są to najważniejsze cechy.
Jest to de facto single Page Application.