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+
Witaj w kolejnej lekcji w której pracujemy nad formularzami
dostępnymi w material design w poprzednich lekcjach omówiliśmy sobie właśnie
jak działa mat form field tutaj czyli pole jedno
formularza z kontrolką z opisem z dodatkami w tej lekcji
pokażę tobie że ten mat form field niekoniecznie musi zawierać input
type text tutaj możemy użyć także innych typów kontrolek nie które
działają z mat form field inne no właśnie inne nie
to teraz tak tutaj mamy pole tekstowe i powiedzmy że zamiast
takiego przykładowego pola tekstowego spróbujmy coś bardziej praktycznego zbudować czyli
powiedzmy zrobimy sobie tutaj jakiś formularz bardziej sensowny powiedzmy
niech to będzie tutaj jakiś nagłówek powiedzmy
rozmiar właśnie h3 w ten sposób i powiedzmy że będziemy
robili dodawanie jakiegoś zadania create task i
to będzie nasze zadanie czyli pierwsze pole będzie opis zadania short
description i tu jak wiesz będzie
wyglądało w ten sposób czyli będziemy mieli po prostu tytuł i tu jedno pole
i to pole jak widzisz jest bardzo wąskie jeśli mamy formularz który jest pionowy
to możemy te pola no zastosować na całą szerokość jest
tutaj delikatnie zmodyfikuję style tego przykładu tutaj mamy szerokość 80 margines
tutaj ja pozwolę sobie dodać powiedzmy display
flex i jeśli formularz ma być pionowy
ma być on kolumną możemy użyć do tego flex direction
column i jeśli chcemy żeby były
one rozciągnięte do całej szerokości możemy także zastosować do tego flexa
tutaj jest opcja stretch czyli rozciągnij zobaczymy
jak to się prezentuje no i nasze pole jak widzisz ma całą szerokość a
dodatkowo jeśli dodamy kolejne pola powinny one się tutaj umieścić
jeden pod drugim w postaci kolumny okej to spróbujemy dodam sobie tutaj kolejną
opcję mat form field w
ten sposób i tym razem mu kolejne pole
to nie będzie zwykły input użyje czegoś innego niech to będzie select
teraz mogłbym użyć użyć selecta tego html
ale muszę mu użyć także mat select i
mat select może zawierać elementy typu mat option czyli
analogicznie do tego co się dzieje po prostu w htmlu option
może mieć value i jakiś tekst i utworzę sobie takie trzy elementy
options value 1 value 2 value 3 i
tutaj już dostaję błąd że mat select oczywiście nie jest rozpoznanym elementem
czyli musimy go standardowo dodać tutaj do naszych modułów mat form field
dodam także mat select module zaimportowałem
tutaj angular material i jak tylko to zrobię i tutaj jakąś zmianę
wprowadzę powinien błąd zniknąć no i teraz co to będzie ten
mat select mat form field musi mieć tutaj jeszcze mat input
no i powiedzmy że będzie to typ
naszego zadania no i tym typem może być faktycznie
zadanie czyli task może być tu jakieś zgłoszenia od
użytkownika powiedzmy issue albo może być to na przykład złożenie
błędu bug report okej zobaczymy jak to się prezentuje
błędów żadnych nie ma mamy opis i mamy
takie pole tutaj do wyboru możemy wybrać sobie jeden z typów zgłoszeń
oczywiście jeśli chcesz kilka na raz wybrać to także istnieje opcja multiple
tak może być to standardowo statycznie
może być też dynamicznie i wtedy pojawiła nam się taka lista tutaj z opcjami wyboru
żebyś mógł zaznaczyć kilka więc jest też zachowuje się to tak jak html ale
wygląda jak material design włącznie z animacjami i stylami
kolorami material my akurat tutaj nie potrzebujemy
tej opcji multiple więc się jej pozbędę czyli jak widzisz możemy użyć także nie
tylko input możemy użyć select możemy użyć także innych rodzajów
kontrolek dodam sobie kolejną rzecz kolejnym
elementem będzie powiedzmy mat radio group
czyli grupa takich przycisków radio okrągłych gdzie możemy tylko
jeden z nich wybrać dlatego musimy je otoczyć takim mat radio group żeby on
wiedział tutaj że te wszystkie elementy tworzą grupę i który z nich akurat
ma być zaznaczony czyli mat radio button
jest to komponent jednego przycisku radio tutaj musimy ustawić mu kolor
jeśli chcemy i
także jakieś value i stworzę też powiedzmy
trzy takie elementy value jeden value dwa value
trzy będzie to powiedzmy poziom naszego zgłoszenia no
właśnie i tutaj nie mamy placeholder bo to nie jest element czy
jeśli chcemy dodać tutaj jakiś opis to muszę zrobić osobnym elementem na przykład
nagłówkiem h5 powiedzmy priority naszego
zgłoszenia czyli będzie to low medium lub
high oczywiście tutaj mi krzyczy na czerwono że nie
jest zesterowany odpowiedni moduł więc standardowo
jak już wiesz mat radio
module błąd powinien
zniknąć i teraz żeby to ładnie wyglądało żeby nam się nie rozjeżdżało bo w tym momencie
no widzisz tutaj się to tak jakoś zbija w grupę
to zrobimy tak że mat radio button jeśli
chcemy żeby układały się one w poziomie jeden obok drugiego no to musimy
dodać im tu jakiś styl czyli powiedzmy jeśli radio
button jest obok drugiego radio buttonu to tu wprowadzimy taką małą
korektę czyli powiedzmy margines po
lewej stronie i jak pamiętasz tutaj jednostki
żeby były wielokrotnością na przykład ósemki albo czwórki żebyśmy
mieli wspójny to i mamy element radio jak widzisz tylko jeden
z nich może być zaznaczony w tym samym momencie okej tutaj
jak widzisz mat form field nie mogę użyć gdybym spróbował to zrobić to
dostanę błąd że mat form field
musi zawierać mat form field control i tutaj nawet próba inputa
nie wiem czy to nawet ma sens tak
to nie działa czyli jak widzisz tutaj form field działa z elementami
które są podobne do oinputa czyli input select ale już radio group
nie radio group nie jest tutaj form fieldem czyli nie możemy użyć ani label ani
placeholder jest to troszkę inny rodzaj kontrolki podobnie
ma się rzecz że no właśnie nie tylko radio buttonami ale
podobnymi czyli checkbox jeśli chcę użyć checkbox'ów tutaj spróbuję zrobić
to jeszcze raz czyli powiedzmy też nie ma h5
ustawimy sobie jakieś opcje options
i będzie to mat nie radio tylko checkbox
i checkbox nie musi być w grupie dlatego że
checkbox mogą być od ciebie zupełnie niezależne więc mogę po prostu utworzyć też powiedzmy
ten color utworzę trzy
i one tutaj nie muszą tworzyć grupy nie muszą być otoczone jedną
grupą ustawmy sobie jakieś opcje powiedzmy czy to jest płatne zadanie bo
powiedzmy robimy aplikacje dla freelancerów chcemy wiedzieć czy to jest praca na
portfolio czy praca którą dany klient zapłaci czy
jest to bloker czy nas to zadanie blokuje czy jest to priorytet
czy jest to zadanie jakieś techniczne czy
nie jest to technicznie i oczywiście znowu musimy dodać odpowiedni moduł
mat checkbox module
importujemy z angular material błąd powinien zniknąć teraz
to pytanie tylko czy będą się nam jakoś też stylami nie
pomieszają nie jest źle i tutaj one pokazują
nam się w pionie odstępy się zgadzają i te
elementy pojawiają się w pionie dlatego że jak pamiętasz ustawiliśmy tutaj flex column
czyli każda kontrolka pojawia się ta jedna pod drugą te
elementy pojawiają się w poziomie dlatego że są otoczone właśnie tutaj dodatkowym radio
group gdybym ja spróbował te checkboxy otoczyć także w jakiegoś diva
powiedzmy w ten sposób tutaj nie powinna być tego flex column
i te elementy nam będą się próbowały ułożyć obok siebie no i znowu nam się pojawia problem tutaj
odstępów więc mogę to szybko skorygować i po prostu analogicznie
tak mieliśmy radio button tak samo spróbuję
tutaj z mat checkbox jeśli są dwa pod rząd obok siebie no to dodaj im
margines 16 tutaj
coś nie tak okej spróbujmy także już nie są o tu zgubiłem możemy
obok siebie lub wszystkie po pierwszym
też zadziała takie coś i teraz są ładnie
w różnych w różnych odstępach więc musisz zdecydować po prostu czy te pola formularza
interesują cię żęby były obok siebie czy jedne pod drugim tak
naprawdę teraz zarówno options jak i priority musimy otoczyć jeszcze dodatkowym
element i znowu zmienić kolejność tak znowu zmienić kierunek
flexboxa czyli z kolumny w wiersz z
wiersza w kolumnę możemy bardzo fajnie sobie layout tutaj poukładać one są jeden obok
jeden pod drugim byśmy teraz tutaj zmienili options
powiedzmy zrobimy sobie options container i
znowu zmienimy kierunek czyli powiedzmy options container
display flex odstęp
z tej strony byłoby ok no
i nie wygląda to najgorzej tutaj można by też w inny sposób to poukładać na
co chciałbym uwagę żebyś zwrócił żeby zwróciła uwagę to jest fakt że
każdy element tutaj ładnie jest ostylowany przez angular material ale
sam layout samo rozmieszczenie pozycja rozmiary tych elementów no
to już potrzeba na na programiście na projektancie tak czyli
angular tutaj nie narzuca nam pewnego layoutu nie ma de facto narzędzi tutaj
angular material jak to poukładać dlatego że to może być na tablecie inaczej
na mobilnych inaczej tak dalej może też różne wymagania różne aplikacje więc
tutaj musimy layoutem się zająć oczywiście są gotowe frameworki narzędzia o tym sobie może też wspomnimy
tutaj chciałem żebyś skupił się właśnie żeby skupiła się na
poszczególnych elementach jak one są ułożone no to z tym zawsze możesz sobie tutaj
pokombinować można też dużo urządzeń to w różny sposób responsywny
dostosować wracając do formularzy tutaj dodam
jeszcze jeden typ który często pojawia się w formularzach czyli
tutaj jeszcze raz i teraz znowu użyję mat form field bo
jest jeszcze jedno pole które możemy umieścić w mat form field jest to text area
text area i teraz nie mam w mat text area mam po prostu text area
możemy tutaj wiersze i kolumny ustawić ale pokażę
tobie inny sposób text area ona
ma placeholder czyli na przykład description naszego zadania opis description
no okej i mat input i
teraz zwróć uwagę że nie podałem wierszy i kolumn więc ten description jest tu taki
mały i tu się nam takie brzydkie przewijanie
pojawia użytkownik mógłby sobie rozciągnąć to
nie ma problemu no ale jednak jest to jakaś taka uciążliwość co
możemy zrobić możemy uzyć specjalnej dyrektywy cdk text
area autosize
uwaga na duże małe litery component development kit text
area autosize i jeśli dodam tą dyrektywę to
ona powinna tutaj wyliczyć zawartość i w miarę jak ja pisze to
automatycznie dodawać kolejne linię jeśli usuwam tekst zwróć uwagę
że ładnie nam się skaluje dopasowuje rozmiarem ten element do
reszty tutaj trzeba zwracać uwagę też jak tworzymy layout bloki na
odstępy pomiędzy poszczególnymi blokami pomiędzy poszczególnymi sekcjami
formularza żeby one się też nie sklejały czyli jak robimy sobie taką sekcję
jak tutaj mieliśmy options na przykład tutaj options container no
to właśnie może warto by rozważyć żeby on tutaj też miał jakiś jakiś
taki odstęp zobaczmy możę trochę
większy spróbujmy dwa razy tyle i nie
top tylko bottom okej
i teraz ten description widzisz nam tej nie najeżdża na pozostałe elementy no
to mamy cały formularz do utworzenia zadania to jedyne co pozostaje nam tutaj
zrobić no to możliwość faktycznie zapisania tych wszystkich danych czyli pozwolę
sobie tutaj jeszcze dodać jakiś jeden element powiedzmy jakiś
tutaj div z jakąś specjalną klasą form actions powiedzmy
w ten sposób standardowo będzie to button żeby
to był angularowy pamiętasz trzeba dodać mat button i
zrobimy może dwa pierwsze to będzie cancel anuluj
a drugi niech będzie create task czyli
zapisz zmiany de facto niech
ten będzie gówną akcją jak pamiętasz główną akcją chcemy wyróżnić tak
ten zwykły button też możemy jakimś kolorem ustawić spróbujmy
w ten sposób i teraz tą klasę form actions dodałem żeby te przyciski tutaj
nam się jakoś tak brzydko nie ułożyły tutaj nie mamy żadnych błędów
nie ma żadnych błędów coś jeszcze popsułem w przyciskach mat button
no właśnie raised button
color primary i te form actions możemy także przy użyciu flex
boxa sobie przesunąć czyli no
właśnie align items flex end wiersz
i chcemy na końcu wiersza umieścić przyciski dobrze
coś jeszcze mam tu pomylone items justify-content
w takim razie okej czyli jak zmieniamy kierunek to musimy użyć innego atrybutu okej
czyli mamy przycisk tutaj je po prawej główna akcja jest wyróżniona akcja
pomocnicza tutaj nie jest wyróżniona ale jeśli jest to akcja niebezpieczna w celu anuluj
usuń zniszcz no to może być na czerwono mógłbym
także zostawić ją po prostu czarną ona jest mniej istotna więc będzie
wiadomo że tutaj opcja jest wyjdź z tego czyli jak widzisz angular zawiera
różne dostępne kontrolki i każdą można opcje parametry różne
style możemy każdą z nich rozszerzyć o dodatkowe informacje których ja nie użyłem
czyli dodatkowe hint label i tak dalej na co jednak
chcemy cały czas zwróć uwagę że layout formularza to nie jest coś co się stanie
jakby prosto automatycznie trzeba do tego jakiś mechanizm wybrać zastosować
żeby te elementy ułożyć niemniej przy odrobinie wysiłku jak widzisz można stworzyć
całkiem przyjazny formularz tutaj akurat na przykład do utworzenia zadania
to tyle jeśli chodzi o tą lekcję do zobaczenia w kolejnych lekcjach
na temat formularzy w angular material