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 wykorzystam jak kolejny komponent dostępny w angular
material i będzie to component listy lista
może być bardzo proste jak widzisz jest to po prostu lista elementów bez żadnych dodatkowych
tutaj dekoracji ale lista może być też bardzo rozbudowana
może zawierać wiele elementów zaczniemy od takiej tutaj prostej listy ja
pozwoliłem sobie tutaj przygotować komponent nowy
czyli podobnie jak w poprzednich lekcjach tutaj jest strona czyli
ng generate component material example pages list example do
modułu dołączony komponent i oczywiście do routingu także
dołączyłem ten nasz nowy komponent list example komponent
tutaj jedną różnicą będzie to że dane dla tego komponentu będziemy
sobie przechowywać w przykładowej usłudze czyli ng generate
service material examples katalog services i
tutaj taką usługę nazwałem contact data service
i tutaj użyłem takiej usługi ui faces żeby sobie zaimportować
jakieś przykładowe dane te dane oczywiście powinniśmy pobierać
przez api z serwera tutaj dla wygody ja te dane po prostu
przekopiowałem ze strony bezpośrednio do usługi jeśli chcesz
skorzystać z uifaces.com to może pobrać właśnie przykładowe
obrazki avatary możesz sobie różne ustawić
opcję i można też korzystać z api tutaj po zarejestrowaniu
się poddajemy token i możemy wygenerować dowolną ilość różnych
obrazków różnych avatarów razem z przykładowym danymi takie jak
imię email pozycja i tak dalej a teraz
przechodząc do naszego przykładu tutaj ta usługa ma metodę find contakts
i mimo trzech kontaktów postaram się troszkę więcej załadować to
będziemy zwracać tylko limit 10 czyli tylko pierwszy z brzegu 10
kontaktów czyli teraz tak żeby użyć tego nasz contakts data service
tutaj w komponencie mam jeszcze podstawowy html będziemy
chcieli tutaj wyświetlać te elementy więc nasz komponent że
mógł używać tej usługi może być private public protected i jest to
usługa contacts data service
w ten sposób i tu jeszcze ciekawostka stworzyłam
odpowiedni interfejs dla tego kontaktu żebyśmy nam odpowiadał czy prawidłowo
używam tego kontaktu czyli name position email photo i mogę sobie ten
interfejs tutaj zaimportować do naszego komponentu czyli nasz komponent
stworzy tutaj listę kontaktów czyli
kontakt ok będzie to tablica na początku będzie pusta
natomiast na ng on init czyli gdy komponent się zainicjalizuje będzie zamontowany
na stronie to do tej listy kontaktów pobierzemy
kontakty z naszego serwisu naszej usługi find contacts limit
domyślnie 10 czyli tutaj nam się powinna już pojawić lista kontaktów
a właściwie no jeszcze się nic pojawiło bo nie mamy takiej listy tutaj żeby
użyć komponentu mat list oczywiście pamiętaj
musimy go zaimportować tutaj do naszego modułu czyli
mat list module i
teraz jak tylko to dodamy no to mogę już używać w htmlu mat list
i mat list powinien zawierać elementy typu mat list item
oczywiście są też inne listy mają inne rodzaje elementów ale
taka najbardziej podstawowa lista właśnie mat list powinna zawierać elementy typu mat list item
test zobaczymy jaki jeden tutaj się zachowa nasz
komponent find contacts to widzę że coś tam się nie
zapisało plik mam nie zapisany błędu nie ma mamy
jeden element oczywiście nie chciałem mieć jednego elementu chciałbym te wszystkie elementy z
naszej listy czyli w komponencie powtarzamy
ten element tyle razy ile
mamy kontaktów czy dla każdego kontaktu z kontaktów
wyświetlimy powiedzmy div contact
name i tutaj dzięki
temu interfejsowi powinien mi podpowiadać zobaczmy
sobie contact name powinniśmy mieć 10 kontaktów i
to się zgadza i tutaj może chcielibyśmy wyświetlić coś jeszcze
mamy tutaj inne informacje o tym kontakcie jak zrobię kropkę to mi właśnie
podpowiada dzięki temu interfejsowi który utworzyłem mamy email position czyli
mogę position sobie wybrać e-mail i wyobrażamy sobie że
te elementy się ładnie pojawią na liście jednak tak się nie dzieje bo tutaj
właśnie brakuje mu informacji jak te elementy rozmieścić
powrzucam tutaj tekst no to on się zachowa normalnie jak tekst czyli do
prawej do lewej strony nam się wyrówna to w ogóle bez odstępów wygląda to
bardzo brzydko i teraz co warto zauważyć że cały ten mat list item
czy inny element listy inny typ elementów listy które mamy on
automatycznie powinien być tutaj display flex czyli jeśli ja zastosuje tutaj
odpowiednio na przykład flex powiedzmy któryś
z tych czyli
na przykład flex 1 1 100 albo flex 1 1 0 zobaczymy
teraz na to jak widzisz one pięknie się ułożą w równych kolumnach dlatego że flex
box każdemu z nich przydzieli odpowiednią przestrzeń jeśli ja spróbuję
tutaj troszeczkę innych elementów powiedzmy pierwszy rozciągnę a dwa pozostałe zwęże
no to widzisz znowu nam się wszystko nam zbija
z tej strony więc można oczywiście ręcznie tutaj ustawić sobie style mógłbym
na przykład zamiast w ten sposób powiedzmy w tym i w tym zrobić style
flex 1 1 i 40%
powiedzmy ustalić zobaczmy
jak teraz wygląda troszkę lepiej ale dalej coś tu nam się rozjeżdża
i oczywiście oprócz takiego ręcznego manipulowania tutaj html'em
mamy jeszcze kilka innych możliwości mianowicie
jeśli tutaj dodamy specjalne atrybut mat line
to on określa to jako linie ja tego pliku jeszcze
nie zapisze spójrzmy na razie jak wygląda html jeśli sbadam ten
element to wewnątrz mat list item content
znajdują się nasze trzy divy i znajduje się coś takiego jak mat list text
jak widzisz mat list text jest pusty czyli ta główna treść text
elementu jest pusty wszystkie nasze elementy są traktowane jako elementy dodatkowe jeśli
chcesz żeby coś było faktycznie elementem listy no to musimy dać mat line
i mat line w ten sposób zapisany lub w
ten sposób określa główny wiersz
główną treść tej listy i teraz zobacz dwa div'y znalazły się poza
tym tekstem natomiast to co dodam mat line znajduje się tutaj w mat list
text czyli możemy zrobić to w ten sposób może być to w ten sposób jeśli
dodam mat line do każdego z nich w ten sposób mamy teraz
trzyliniową trzyliniowy item to zobacz
elegancko one się ułożą jeden pod drugim i teraz to co
nie będzie miało mat item będzie układało się w poziomie jedno obok
drugiego natomiast wszystkie elementy z mat item są umieszczone jeden
pod drugim tutaj warunek jest taki że one muszą być bezpośrednio dzieckiem tego mat list item
i zwróć uwagę też że odpowiednie stylowanie dopasowuje się do ilości elementów
czyli mamy tutaj mat list item trzy
liniowy jeśli jeden element tutaj usunę powiedzmy tylko
dwa z nich będzie miało to mat line to
angular tu dobierze odpowiedni styl tym razem mamy mat list item mat 2 line
czyli on dopasowuje te elementy czyli możemy elementy które
są jakby głównym tekstem główną treścią w pionie
jeden pod drugim one dzięki temu zobacz łączą się w taką grupę wszystkie
ważne informacje znajdują się w jednym miejscu natomiast takie dodatkowe informacje pomocnicze
muszą w dodatkowych kolumnach ja spróbuję to sobie odwrócić czyli
powiedzmy pozycję ustalimy na zewnątrz ze
stylem ręcznie ustawionym na 40% natomiast email
i name umieścimy jako główna kolumna czyli
tu w głównej kolumnie możesz dać kilka wierszy i dodatkowe kolumny
mogą zawierać dodatkowe informacje jest uwaga dlaczego w ten sposób dlatego że lista
przeważnie służy właśnie do listy pojedynczych informacji jeśli masz
kilka kolumn no to pytanie czy nadal chcemy listę bo
zobacz przy małych urządzeniach tutaj to może znowu się zrobić na bardzo gęste
nieczytelne zwróć uwagę także ten mat text on tutaj domyślnie jest przycinany
przy małym ekranie tak czyli te dodatkowe informacje które mają ustawione stały flex
one zaczną kasować tą główną informację przynajmniej ją przycinać
czyli ten główny tekst może być bardzo długi to może być kawałek wiadomości opis
tytuł zostanie on przycięty natomiast po prawej stronie mam takie właśnie rzeczy
jak tagi etykiety przyciski coś co nie może być przycięte jednak
uważaj dlatego że na małych ekranach po prostu może się to wszystko nie zmieścić możemy
na przykład tutaj jeszcze dodać powiedzmy w ten sposób jeszcze jeden wiersz
nie będę go powtarzał i dodać tu na przykład opisy kolumn czyli
w pierwszej kolumnie będzie to name razem z emailem a
w drugiej kolumnie będzie to position i
tu przytniemy te elementy i
wygląda tutaj to niby dobrze mamy w tej samej kolumnie ale one nie wyglądają
jak nagłówki więc mamy tu jeszcze taki styl
w angular material i jak
mat header cell i
żeby to wyglądało jak komórka nagłówka jest to szare zwróć uwagę że mają inny tutaj
rozmiar z tego tytułu że ten tekst tutaj ten mat line domyślnie
jest troszkę większy a kolejne dni są trochę mniejsze czyli tak jak widzisz tutaj też jest zaaplikowane
sttylowanie z material design czy tu trzeba było usunąć ten mat line
tylko jak tylko to zrobię i użyję na przykład jakiegoś innego stylu
no to już muszę uważać żeby znowu te kolumny się zgadzały żeby ten
nasz nagłówek miał dokładnie ten sam styl który ma mat line czyli
musi on faktycznie się rozciągać do maksymalnej dostępnej szerokości tak
samo jak mat line jeśli mam dużo informacji o takim
gridzie to może nam to wszystko tutaj zlewać no właśnie jest to lista nie
grid żeby to jeszcze było bardziej czytelne lub jeśli
nie jest czytelne możemy także rozdzielić te elementy mianowicie mogę
pod elementem dodać mat divider i
pod każdym elementem dodać mat divider zobacz że dodaję go w środku a
nie pomiędzy elementami naszego elementu i to umieści odpowiednie
linie oczywiście pamiętaj że mat divider musimy także zaimportować
tutaj do naszego modułu jeśli chcemy z niego korzystać czyli
w ten sposób można budować takie typowe proste listy czyli jak widzisz mogą
one mieć kilka kolumn mogą mieć kilka wierszy pamiętaj żeby te
wiersze właśnie dodawać przy użyciu mat line i mat line
po prostu zmienia troszkę wygląd stylowania mat line domyślnie zajmuje maksymalną
szerokość więc wszystkie pozostałe elementy musisz nadać im właśnie
samemu jaką szerokość flex jeśli nie chcesz żeby zostały po prostu ściśnięte maksymalnie
jak tylko się da znowu jeśli mają one tego flex'a no to musisz uważać żeby przy małych ekranach ten
element w którym właśnie ustawiam 40% jest
szansa że one będą zakrywały ten tekst przy mały ekranach no
właśnie więc musisz zastanowić się co chcesz osiągnąć i jeśli zbyt
zbyt dużo informacji się tu znajduje no to pytanie czy nadal chcemy listę czy nie
lepiej byłoby tu umieścić grid tabele z kolumnami a
nie listę lista przeważnie powinna mieć właśnie jeden jedną informację
może po prawej po lewej stronie zawierać dodatkową
kolumnę maksymalnie dwie które zawierają jakieś dodatkowe pomocnicze
informacje lub przyciski akcje ikony jeśli
chodzi właśnie o te wszystkie dekoratory ikony przyciski o tym
już w kolejnej lekcji tak więc do zobaczenia