w Praktyce
7 godz. 1 min · Angular · Full-stack i Programowanie
Mateusz KuleszaSenior Software Developer, Konsultant, TrenerPodstawą produktywnej pracy z angularem jest możliwość zagwarantowania że wszystko działa bez potrzeby wielokrotnego “przeklikiwania” poszczególnych ekranów. W pierwszej części kursu omawiam więc temat testów automatycznych.Już po obejrzeniu pierwszych lekcji zobaczysz dlaczego warto testować kod i jak dzięki narzędziom dostarczonym z angularem jest to proste. Zobaczysz jak testowanie automatyczne pozwoli zaoszczędzić Ci wiele godzin spędzonych na szukaniu błędów.
Za jakość aplikacji odpowiada nie tylko to czy działa ona poprawnie, ale w dużej mierze decyduje o tym dobry interfejs użytkownika oraz UX, czyli user experience. Dwie kolejne sekcje kursu poświęcone są właśnie dobremu UI oraz UX. Omawiam typowe problemy w oparciu o zasady i wskazówki specyfikacji Google Material Design - jednej z najbardziej szczegółowych specyfikacji UX. Wszystkie przykłady UI zarówno w wariantach desktopowych jak i mobilnych omówione są na przykładzie Angulara oraz obszernej biblioteki komponentów Angular Material. Zobaczysz nie tylko jak korzystając z gotowych komponentów błyskawicznie budować nowe funkcjonalności, ale przy okazji omówimy wiele praktycznych wskazówek oraz dobrych praktyk UX które warto wykorzystać w Twoich aplikacjach.
W ramach budowania interfejsów skupimy się na najmniejszych szczegółach takich jak prawidłowe zachowanie linków, przycisków oraz wskaźników przechodząc stopniowo do coraz większych elementów aplikacji takich jak nawigacja, układ strony, paski nawigacyjne czy okna dialogowe. Przy każdym etapie czeka Cię masa wskazówek, przykładów i rozwiązań typowych problemów user experience.
Jednak UX to nie tylko wygląd i zachowanie pojedynczych elementów. W ostatnich sekcjach kursu dowiesz się jak projektować bardziej złożone interakcje z użytkownikiem. Zobaczysz wieloetapowe formularze kreatora oraz dowiesz się jak zarządzać stanem aplikacji oraz różnymi źródłami danych. Pokaże Ci jak zbudować samodzielnie sortowane, filtrowane i stronicowane źródła danych oraz połączyć je z różnymi komponentami UI takimi jak listy czy datagrid.
Na koniec kursu zobaczysz jak możemy różne gotowe elementy UI połączyć w przepływ ekranów budując ścieżkę użytkownika. Zobaczysz jak prawidłowo zaprojektowane komponenty wraz z dobrze zaplanowanym UX pozwalają być niesamowicie produktywnym jednocześnie nie poświęcając jakości czy dobrej architektury aplikacji.
Jest to kurs dla osób które już pracowały z angularem i chciałyby wyjść poza pojedyncze techniki oraz poznać proces projektowania aplikacji w praktyce z uwzględnieniem najlepszych praktyk programistycznych oraz user experience. Zarówno w wariancie webowym jak i projektując pod urządzenia mobilne.
Angular 6, 7, 8+
W tej lekcji wykorzystamy wszystko co dowiedzieliśmy się o listach
przyciskach ikonach i tak dalej żeby zbudować taki przykład
na przykład listy kontaktów i tutaj wygenerowałem dodatkowy komponent
jest to nie strona tylko komponent czyli znajduje się tutaj także w katalogu components
jest to contact selection list czyli lista która słuzyła do wyświetlania
przeglądania i wyboru kontaktu który chcemy którego szczegóły
chcemy wyświetlić i oczywiście przekazuje tutaj nasze kontakty ma on tutaj
input który będzie zawierał właśnie te dane kontaktów
jeśli chodzi o html to na razie tutaj za wiele nie ma czyli
tutaj w tym komponencie contact selection list możemy tak jak poprzednio zrobić sobie mat list
który zawiera mat list item w ten
sposób będziemy powtarzać te elementy tyle ile mamy kontaktów czyli let
contact of contacts w
ten sposób i tu na razie powiedzmy wyświetlę div
mat line czyli standardowo i tu będzie nasz kontakt
powiedzmy name tutaj
nie mat tylko będzie to div oczywiście
tu błąd okej
zobaczymy jak to wygląda i mamy po prostu tutaj listę
kontaktów nie wiem czy zwrócić uwagę że ten element zmieniłem ikona contact
to lepiej wyglądało i ten tutaj nagłówek ma coś takiego
jak mat display jeden jeśli chcesz takie właśnie duże eleganckie nagłówki
to możesz skorzystać właśnie z tych elementów mat display
i od jeden do cztery można je coraz większe robić zależy od tego co
potrzebujemy tutaj jest bardzo fajne taki duży hipsterski
nagłówek co czasami się przydaje jeśli chcesz bardzo takie nietypowe eleganckie
layouty zbudować ja dostanę taki delikatny
display 1 pod spodem lista naszych kontaktów na razie bez
żadnych dodatków tutaj jak pamiętasz te elementy one
zawierały jeszcze obrazek czyli jeśli przejdziemy do selection list
i ja spróbuję tutaj powiedzmy przed mat line
dodać image obrazek i
tu do source przekazujemy ścieżkę do naszego obrazka
czyli foto i jako opis damy
po prostu nazwy kontaktu contact name i
jeśli teraz spojrzymy tutaj te obrazki nam się tu nie za bardzo załadowały
jeszcze spojrzę co jest nie tak null czyli nie tak
nie phone chcemy tylko jeszcze raz photo
też na p zobaczmy teraz i no
nie do końca o to nam chodziło tak te obrazki no zajmują za dużo miejsca no
i oczywiście są z prawej strony bo treść dodatkowa nie jest to
treść główna jeśli chcielibyśmy te ikonki po lewej stronie
no to właśnie nie są to ikonki tyle
co avatary avatary dla każdego
elementu listy nawet jeśli to nie są osoby czyli tutaj dla tego elementu
zamiast mat list icon tak już poprzednio to
używamy mat list avatar który sprawi że ta ikona
po prostu stanie się avatarem tego elementu czyli pojawi się tu jako takie okrągłe
kółko oczywiście dla każdego elementu możemy dodać troszkę więcej informacji na
przykład mogę tu umieścić jeszcze powiedzmy position możemy mat divider
dodać możemy tą listę znacznie rozbudować oczywiście każdy
tutaj element może mieć po prawej stronie jeszcze jakieś kolumny ikonki
i tak jak robiliśmy to wcześniej i teraz tak jeśli chcemy ten wygląd troszkę
zmienić to możemy oczywiście tutaj dodać dodatkowe style czyli powiedzmy jak
mamy ten image i chcę dodać jakiś styl to nie mogę po prostu nadpisać
tego stylu który tutaj jest bo jak padam width 100 pikseli jak widzisz nic
się nie dzieje dlatego że te style angularowe angular material
są ważniejsze i też nie polecam ich modyfikować w ten sposób bo zmienimy
w innym miejscu będziemy chcieli w innym i tak dalej polecam stworzyć do tego osobną
klasę czyli jeśli ja tutaj żeby w tym samym miejscu style
sobie zrobię na razie tutaj i
napiszę to w ten sposób że obrazek który ma jednocześnie
styl mat list avatar tutaj angular
sam dodaje taką klasę jak widzisz tutaj jeśli dodamy atrybut mat list avatar tutaj
angular dodaje swoje style dodając odpowiem klasę mat list avatar i
oprócz tego na przykład doda mi jeszcze naszą klasę nie zacznę jej od słówka mat
bo te są zarezerwowane dla materiala więc podam po prostu list
avatar i powiedzmy że nie chcemy żeby to było kwadratowe
czyli chcemy prostokątny no to ustawiamy mu szerokość
na przykład 56
bardziej kwadratowy spróbujemy żeby to było w ten sposób
i dodam odpowiednią klasę do tego naszego obrazka
i zobaczmy tutaj
coś nie zadziałało oczywiście nie podałam jednostek pikseli pikseli
i zobaczmy teraz one się tu powiększyły jak widzisz i
teraz co możemy zrobić jeśli ja wysokość tutaj zmienię o możemy sobie ostylować
jak chcemy żeby obrazek lepiej pasował mamy coś takiego jeszcze jak object fit
możemy też dobrać w jaki sposób chcemy je przyciąć jeśli się nie mieszczą cover
wygląda dobrze i powiedzmy w ten sposób może
border radio sobie ustawimy
na 0 może
w ten sposób tak mamy takie prostokątne wtedy avatary czyli pamiętaj
jeśli chcesz napisać któryś ze styli no to trzeba dodać dodatkowo oprócz istniejących
klas trzeba dodać własną klasę do tego
elementu którego styl chcemy zmienić czyli mamy te kwadratowe tutaj prostokątne
avatary i jest tutaj jeszcze jeden
przycisk i powiedzmy że chcielibyśmy faktycznie mieć możliwość wybierania tych elementów
i jak najbardziej możemy tutaj zrobić button mat icon button
mat icon standardowo nic nowego i
powiedzmy że chcemy ten przycisk w prawą stronę czy
jest tu gdzieś przycisk w prawą stronę mamy jasność o chevron
right chevron left mamy całą sekcję navigation elegancko
mamy strzałki i mamy tutaj taki chevron spróbuję
użyć tego chevron zobaczmy
jak to będzie wyglądało i mamy tutaj przyciski jeśli
chcesz jednak żeby cały element listy jakby był przyciskiem żeby był klikalny
to możemy robić to inaczej możemy zamiast tutaj tutaj
zamiast przycisku możemy zrobić żeby cały element listy był
przyciskiem wtedy jednak trzeba
tu dodać atrybut mat list item i spójrz w dokumentację
tu jest sekcja action list czyli po prostu zamiast zwykłej listy
mamy listę akcji i zamiast elementów mamy przyciski ale przycisk zwróć uwagę musi być
jako list item oznaczone czyli zamieniamy mat list na mat
action list i mat list item
zamieniamy na butom aczkolwiek button ten musi
mieć odpowiedni atrybut mat list item jeśli
teraz zapiszę plik zobaczymy jak wygląda nasz przykład jak widzisz
tutaj te elementy teraz tutaj się podświetlają mogę
je kliknąć czyli każdy z nich stał się teraz przyciskiem
i ta ikonka tutaj jest tylko informacyjna cały element jest
przyciskiem i możemy też nasłuchiwać na przykład akcji czyli mogę zrobić sobie tutaj click select
i na przykład contact który właśnie tutaj mamy wyświetlony
chcemy przekazać do na przykład jakiejś tam funkcji select ja sobie tutaj szybko zdefiniuje
czyli funkcja select jeśli
ktoś kliknie contact to ten contact możemy przez output przekazać
na zewnątrz tak czyli powiedzmy selection change new
event emitter z angular core i
cały kontakt możemy wyemitować czyli this selection
change emit i nasz kontakt który właśnie
kliknęliśmy okej
select i teraz komponent który używa tej
naszej listy tutaj można nasłuchiwać takiego zdarzenia jak selection
change i tu powiedzmy na szybko zrobię sobie selected to
się równa event czyli na szybko sobie wybiorę zaznaczony element i tutaj
pamiętasz nasz details list mogliśmy przekazywać mu zaznaczony element więc
przekażę tutaj nasz selected i jeśli ten jeśli
mamy selected tylko wtedy będziemy go wyświetlali
spróbujmy w ten sposób tutaj możemy zdefiniować to jeszcze w komponencie
ten selected czyli selected ustawię tutaj
contact okej i
nasz rodzic którego nie zapisałem oczywiście powinien to wyświetlić tu
sobie jeszcze jedną rzecz mianowicie te wszystkie elementy tutaj te oba
umieszczę tutaj w elemencie powiedzmy row wiersz
i nasz element row damy
mu flex display flex żeby elementy
układały się tutaj w wierszu i każdemu z tych elementów damy
jeszcze klasę czyli powiedzmy tutaj tutaj kolumna
czyli damy im też po jakiś flex
powiedzmy jeden żeby zajęły po równo miejsce okej
zobaczymy jak to się zachowa klikamy element
widzę jego szczegóły tutaj nie mniej przydałoby się
dodać jeszcze jakiś odstęp nie ma problemu nasz mat divider może
działać także w trybie pionowym
wystarczy dodać opcję vertical true i powinniśmy zobaczyć tutaj odstęp
pionowy czyli tu jest kreska mamy odstęp
przydałby się jeszcze jakieś marginesy więc tu tylko mała
modyfikacja dodam jeszcze tutaj na razie na sztywno
styl powiedzmy że margines albo padding wielokrotność
ośmiu więc zrobimy 16 pikseli i oczywiście mamy kilka elementów które
chcielibyśmy pokazywać chować możemy jest zgrupować w ng container
na kontenerze ustawić warunek selected
lub nie selected i te elementy w
środku ukryć jeśli nie mamy zaznaczonego zadnego kontaktu
czyli teraz jeśli klikam kontakt no to tu się pojawiają jego szczegóły
i jeśli zmieniam kontakt te szczegóły się zmieniają oczywiście one nie są ładowane
z serwera żeby ładować je z serwera trzeba by było dodać tutaj no
faktycznie połączenie z serwerem i tu się gdzieś zasubskrybować żeby te dane
były pobierane po prostu asynchronicznie tym się na razie nie zajmujemy się wyłącznie interfejsem
i ten interfejs jak widzisz można sobie bardzo fajnie składać z
poszczególnych list ikon elementów i tak dalej no
właśnie zobaczymy jakie jeszcze możliwości layoutu układu są
dostępne w material design ale to już w kolejnych lekcjach tak więc do zobaczenia