O predmete
Predmet Webové technológie je určený pre študentov Košickej akadémie softvérového vývoja, druhý ročník. Predmet poskytuje vedomosti a skúsenosti v práci s Javascript-om, Typescript-om a frameworkom Angular.
Stretnutia
27. Angular - strážcovia routovania II
Na poslednom obsahovom stretnutí si dokončíme tému strážcov routovania, konkrétne typy CanDeactivateFn a Resolve
26. Angular - hierarchické routovanie, strážcovia routovania
Vytvoríme si hierarchické routovanie modulu pre skupiny. Začneme tému strážcov cez metódy CanActivateFn, CanActivateChildFn, CanMatchFn.
25. Angular - sortovanie, filtrovanie, moduly, asynchrónne routovanie
Dokončíme usporiadavanie v tabuľke, pridáme filtrovanie a povieme si o upraviteľnosti základného nastavenia. Porozprávame si o asynchrónnom routovaní komponentov, moduloch a možnosti routovania modulov.
24. Angular - paginátor a sortovanie
Na začiatku si spravíme druhú obhajobu projektov. Použijeme material komponenty MatPaginator a MatSort na pagináciu a usporiadanie záznamov o používateľoch.
23. Angular - použitie editačného komponentu na nový objekt
Na začiatku si spravíme prvú obhajobu projektov. Dotiahneme uloženie editovaného používateľa a využijeme editačný komponent aj na pridanie používateľa.
22. Angular - Reaktívne formuláre
Predstavíme si ďalšiu formu prepojenia DOM modelu a dát - reaktívne formuláre na príklade editačného formulára používateľa.
21. Angular - konfirmačný dialóg, ActivatedRoute
Spravíme si konfirmačný dialóg založený na MatDialog a použijeme ho pri mazaní používateľov.Spravíme si prípravu na editačný formulár na používateľa - získanie hodnôt z URL cez activated route.
20. Angular - asynchrónny validátor, mazanie používateľov
Vytvoríme si vlastný asynchrónny validátor pre signálny formulár na odhalenie konfliktu v mene a emaily na serveri. Vlastnými silami si vyskúšate mazanie používateľov.
19. Angular - registrácia, signálne formuláre
Predstavíme si signálne formuláre a použijeme ich pri tvorbe registračného formulára. Vyskúšame si vytvorenie vlastných validátorov.
18. Angular - Validácia, reaktívne formuláre
Pozrieme sa pod kapotu dvom starším formulárovým modelom - template driven formuláre a reaktívne formuláre. Povieme si o validácii v týchto modeloch a ako s ňou pracovať.
17. Angular - logout, vlastná pipe
Upravíme si navigačnú lištu tak, že vždy ukazuje správne stav prihlásenia a zrealizujeme odhlásenie na strane klienta. Ukážeme si zložitejšie stĺpce v Material Table a vytvoríme si vlastnú Pipe na zobrazovanie skupín a práv používateľa.
16. Angular - zložitejšie stĺpce tabuľky, localStorage
Vytvoríme navigáciu na stránku. Použijeme token na získanie rozšírených používateľov a zobrazíme si ich v tabuľke. Uložíme sme si token v localStorage, ktorý prežije aj zmenu URL "zvonku".
15. Angular - Material SnackBar. univerzálne spracovanie HTTP chýb
Vytvoríme si službu na vypisovanie informačných a chybových správ cez Matrerial Snackbar. Napíšeme si univerzálnu ochytávaciu metódu na HTTP chyby.
14. Angular - Prihlasovanie
Dokončíme prihlasovanie.
13. Angular - router, ng-model
Nastavíme základný router aj s presmerovaním a odchytením všetkých zlých URL adries. Vytvoríme si komponent na prihlasovanie a spracujeme prihlásenie v službe.
12. Angular - Material knižnica, router, Material table
Ukážeme si na príklade tabuľky používateľov použitie Material knižnice a to rovno cez komponent mat-table s jednoduchými stĺpcami mat-text-column. Na zobrazenie in0ho komponentu použijeme router.
11. Angular - servisy, komunikácia so serverom, Observable
Vytvoríme si service a napojíme sa na REST server. Pohráme sa so spracovaním rôznych druhov HTTP odpovedí.
Server spustíme v konzole, ak máme nainštalovanú javu aspoň vo verzii 17, príkazom:
10. Angular - komponenty
Porozprávame si o entitách a princípe MVC v komponentoch, vytvoríme si službu na správu zoznamu používateľov.
9. Angular - vytvorenie projektu, komponenty
Vytvoríme si Angular projekt, vysvetlíme si základnú štruktúru, vytvoríme si nový komponent a vypíšeme hodnoty signálnych premenných.
8. Higher-order funkcie v poliach VII
Budeme pracovať s JSON dokumentmi získanými z adresy https://swapi.dev/ podľa úloh uvedených nižšie.
Úlohy:
- Vráťte mená všetkých postáv spolu s ich živočíšnym druhom v tvare:
[ { name: 'Luke Skywalker', specimen: [] }, { name: 'C-3PO', specimen: [ 'Droid' ] }, { name: 'R2-D2', specimen: [ 'Droid' ] }, { name: 'Darth Vader', specimen: [] },... ] - Vráťte pre každú planétu, aké postavy tam žijú v tvare:
[ { planet: 'Tatooine', people: [ {'name':'Luke Skywalker','url':'https://swapi.dev/api/people/1/'}, {'name':'C-3PO','url':'https://swapi.dev/api/people/2/'}, {'name':'Darth Vader','url':'https://swapi.dev/api/people/4/'}, ...]}, { planet: 'Alderaan', people: [ {"name":"Leia Organa","url":"https://swapi.dev/api/people/5/"}, {"name":"Bail Prestor Organa","url":"https://swapi.dev/api/people/68/"}, {"name":"Raymus Antilles","url":"https://swapi.dev/api/people/81/"} ...] }, { planet: 'Yavin IV', people: [] },...] - Vráťte pre každú planétu, aké živočíšne druhy na nej poznáme v tvare:
[ { planet: 'Tatooine', species: [ 'Droid' ] }, { planet: 'Alderaan', species: [ 'Human' ] }, { planet: 'Yavin IV', species: [] }, ... { planet: 'Naboo', species: [ 'Droid', 'Gungan', 'Human' ] }, ...]
7. Higher-order funkcie v poliach VI
Budeme pracovať s JSON dokumentmi získanými z adresy https://swapi.dev/ podľa úloh uvedených nižšie.
Úlohy:
- Vráťte mená všetkých postáv v tvare:
[ 'Luke Skywalker', 'C-3PO', 'R2-D2', 'Darth Vader',... ]
- Vráťte mená všetkých postáv usporiadané podľa mena:
[ 'Ackbar', 'Adi Gallia', 'Anakin Skywalker', 'Arvel Crynyd', 'Ayla Secura',... ]
- Vypíšte mená všetkých postáv usporiadané podľa "priezviska":
[ 'Ackbar', 'Mas Amedda', 'Padmé Amidala', 'Wedge Antilles', 'Raymus Antilles',... ]
- Vráťte mená všetkých postáv filmu Impérium vracia úder zoradené podľa dĺžky celého mena od najkratších. V rámci rovnakých dĺžok nech sú usporiadané ako reťazce (podľa mena):
[ 'Yoda', 'Bossk', 'C-3PO', 'IG-88', 'Lobot', 'R2-D2', 'Han Solo', ... ]
- Vráťte mená všetkých postáv spolu s ich živočíšnym druhom v tvare:
[ { name: 'Luke Skywalker', specimen: [] }, { name: 'C-3PO', specimen: [ 'Droid' ] }, { name: 'R2-D2', specimen: [ 'Droid' ] }, { name: 'Darth Vader', specimen: [] },... ] - Vráťte pre každú planétu, aké postavy tam žijú v tvare:
[ { planet: 'Tatooine', people: [ {'name':'Luke Skywalker','url':'https://swapi.dev/api/people/1/'}, {'name':'C-3PO','url':'https://swapi.dev/api/people/2/'}, {'name':'Darth Vader','url':'https://swapi.dev/api/people/4/'}, ...]}, { planet: 'Alderaan', people: [ {"name":"Leia Organa","url":"https://swapi.dev/api/people/5/"}, {"name":"Bail Prestor Organa","url":"https://swapi.dev/api/people/68/"}, {"name":"Raymus Antilles","url":"https://swapi.dev/api/people/81/"} ...] }, { planet: 'Yavin IV', people: [] },...] - Vráťte pre každú planétu, aké živočíšne druhy na nej poznáme v tvare:
[ { planet: 'Tatooine', species: [ 'Droid' ] }, { planet: 'Alderaan', species: [ 'Human' ] }, { planet: 'Yavin IV', species: [] }, ... { planet: 'Naboo', species: [ 'Droid', 'Gungan', 'Human' ] }, ...]
6. Higher-order funkcie v poliach V
Budeme pracovať s JSON dokumentom countries.json podľa úloh uvedených nižšie.
Úlohy:
- Postupne vytvorte nasledovné funkcie a zreťazte ich cez pipe alebo flow:
- Vytvorte funkciu languageToCountArray, ktorá vráti pre každý výskyt jazyka objekt s názvom jazyka a počtom obyvateľov krajiny, kde ste tento jazyk našli.
-
Vytvorte funkciu languageToCountObject, ktorá vezme výsledok predošlej metódy a vráti objekt,
kde vlastnosti sú jazyky a hodnoty sú súčty počtov obyvateľov pre jednotlivé jazyky.
{ Pashto: 27657145, Uzbek: 59233545, Turkmen: 32408265, Swedish: 15415580, ...} -
Vytvorte funkciu arrayOfLanguages, ktorá vezme výsledok predošlej metódy a vráti pole, v ktorom
pre každý jazyk máme objekt s názvom jazyka a počtom obyvateľov, ktorý týmto jazykom rozprávajú
(predpokladáme, že
každý obyvateľ, ktorý žije v krajine, kde sa používa, túto reč ovláda).
[ { language: 'Pashto', count: 27657145 }, { language: 'Uzbek', count: 59233545 }, { language: 'Turkmen', count: 32408265 }, ...] - Vytvorte funkciu sortArray, ktorá vezme výsledok predošlej metódy a usporiada ho od najväčších po najmenšie počty.
- Vytvorte funkciu topTen, ktorá vezme výsledok predošlej metódy a vráti pole iba prvých 10 objektov z pôvodného poľa.
- Vytvorte funkciu humanReadable, ktorá vezme výsledok predošlej metódy a vráti podobné pole, ale počty sú uvedené ako reťazce v tvare napr. "1.414 mld", teda číslo v miliardách zaokrúhlené na milióny a s pridaným reťazcom " mld".
-
Vytvorte funkciu toString, ktorá vezme výsledok predošlej metódy a vráti reťazec obsahujúci
výslednú tabuľku najpoužívanejších 10 jazykov aj s počtom ľudí teda:
English: 2.655 mld Chinese: 1.414 mld Hindi: 1.296 mld ...
5. Higher-order funkcie v poliach IV
Povieme si ako reťaziť funkcie prostredníctvom rúry. Budeme pracovať s JSON dokumentom countries.json, podľa úloh uvedených nižšie.
Úlohy:
- Vráťte pre každú menu, ktorá sa používa aspoň v 5 krajinách, krajiny, v ktorých sa ňou platí a ich počet.
Výsledkom je usporiadané pole od najmenej používaných po najviac používané meny, teda:
[ { currency: 'New Zealand dollar', countries: [ 'Cook Islands', 'New Zealand', 'Niue', 'Pitcairn', 'Tokelau' ], count: 5 }, { currency: 'Central African CFA franc', countries: ['Cameroon', 'Central African Republic', 'Chad', 'Congo', 'Equatorial Guinea', 'Gabon'], count: 6 }, ... ] - Vypíšte prvých 10 najhustejšie obývaných krajín - pre každú krajinu jej názov a hustotu obyvateľstva v počte ľudí na km2 zaokrúhlenú na 2 desatiné miesta.
- Domáce zadanie (dobrovoľné): Postupne vytvorte nasledovné funkcie a zreťazte ich cez pipe alebo flow:
- Vytvorte funkciu languageToCountArray, ktorá vráti pre každý výskyt jazyka objekt s názvom jazyka a počtom obyvateľov krajiny, kde ste tento jazyk našli.
-
Vytvorte funkciu languageToCountObject, ktorá vezme výsledok predošlej metódy a vráti objekt,
kde vlastnosti sú jazyky a hodnoty sú súčty počtov obyvateľov pre jednotlivé jazyky.
{ Pashto: 27657145, Uzbek: 59233545, Turkmen: 32408265, Swedish: 15415580, ...} -
Vytvorte funkciu arrayOfLanguages, ktorá vezme výsledok predošlej metódy a vráti pole, v ktorom
pre každý jazyk máme objekt s názvom jazyka a počtom obyvateľov, ktorý týmto jazykom rozprávajú
(predpokladáme, že
každý obyvateľ, ktorý žije v krajine, kde sa používa, túto reč ovláda).
[ { language: 'Pashto', count: 27657145 }, { language: 'Uzbek', count: 59233545 }, { language: 'Turkmen', count: 32408265 }, ...] - Vytvorte funkciu sortArray, ktorá vezme výsledok predošlej metódy a usporiada ho od najväčších po najmenšie počty.
- Vytvorte funkciu topTen, ktorá vezme výsledok predošlej metódy a vráti pole iba prvých 10 objektov z pôvodného poľa.
- Vytvorte funkciu humanReadable, ktorá vezme výsledok predošlej metódy a vráti podobné pole, ale počty sú uvedené ako reťazce v tvare napr. "1.414 mld", teda číslo v miliardách zaokrúhlené na milióny a s pridaným reťazcom " mld".
-
Vytvorte funkciu toString, ktorá vezme výsledok predošlej metódy a vráti reťazec obsahujúci
výslednú tabuľku najpoužívanejších 10 jazykov aj s počtom ľudí teda:
English: 2.655 mld Chinese: 1.414 mld Hindi: 1.296 mld ...
4. Higher-order funkcie v poliach III
Povieme si ako reťaziť funkcie prostredníctvom rúry. Budeme pracovať s JSON dokumentom countries.json, podľa úloh uvedených nižšie.
Úlohy:
- Vráťte objekt, kde vlastnosti sú jazyky z Južnej Ameriky a ich hodnotami polia krajín z Južnej Ameriky, v
ktorých sa nimi hovorí, teda:
{ Spanish: ['Argentina', 'Bolivia (Plurinational State of)', 'Chile',...], Portuguese: [ 'Brazil' ], English: [ 'Falkland Islands (Malvinas)', 'Guyana',...], ... } - Vráťte pole objektov s dvoma vlastnosťami, jazyk z Južnej Ameriky a krajiny z Južnej Ameriky, v ktorých sa
ním hovorí, teda:
[ { language: 'Spanish', countries: ['Argentina', 'Bolivia (Plurinational State of)', 'Chile',...]}, { language: 'Portuguese', countries: [ 'Brazil' ]}, { language: 'English', countries: [ 'Falkland Islands (Malvinas)', 'Guyana',...]}, ... ] - Vráťte pre každú menu, ktorá sa používa aspoň v 5 krajinách, krajiny, v ktorých sa ňou platí a ich počet.
Výsledkom je usporiadané pole od najmenej používaných po najviac používané meny, teda:
[ { currency: 'New Zealand dollar', countries: [ 'Cook Islands', 'New Zealand', 'Niue', 'Pitcairn', 'Tokelau' ], count: 5 }, { currency: 'Central African CFA franc', countries: ['Cameroon', 'Central African Republic', 'Chad', 'Congo', 'Equatorial Guinea', 'Gabon'], count: 6 }, ... ]
3. Higher-order funkcie v poliach II
Vysvetlíme si ďalšie higher-order funkcie v poliach - flat, flatMap, reduce a reduceRight. Budeme pracovať s JSON dokumentom countries.json, podľa úloh uvedených nižšie.
Úlohy:
- Vráťte pole všetkých jazykov, ktoré sa používajú Južnej Amerike bez duplicít, teda:
[ { iso639_1: 'es', iso639_2: 'spa', name: 'Spanish', nativeName: 'Español' }, { iso639_1: 'gn', iso639_2: 'grn', name: 'Guaraní', nativeName: "Avañe'ẽ" }, { iso639_1: 'ay', iso639_2: 'aym', name: 'Aymara', nativeName: 'aymar aru'}, ... ] - Vráťte objekt, kde vlastnosti sú jazyky z Južnej Ameriky a ich hodnotami polia krajín z Južnej Ameriky, v
ktorých sa nimi hovorí, teda:
{ Spanish: ['Argentina', 'Bolivia (Plurinational State of)', 'Chile',...], Portuguese: [ 'Brazil' ], English: [ 'Falkland Islands (Malvinas)', 'Guyana',...], ... }
2. Higher-order funkcie v poliach
Vysvetlíme si základné higher-order funkcie v poliach - forEach, filter, map, flat, flatMap, reduce a reduceRight. Skúsime si nejaký Typescriptový súbor stranskriptovať a spustiť. Ak stihneme, budeme pracovať s JSON dokumentom countries.json podľa úloh uvedených nižšie.
Úlohy:
- Vráťte pole s názvami všetkých krajín.
- Vráťte pole s názvami európskych krajín.
- Vráťte pole objektov s vlastnosťami name a area, popisujúce krajiny s počtom obyvateľov nad 100 miliónov,
teda:
[ { name: 'Bangladesh', area: '147570 km2' }, { name: 'Brazil', area: '8515767 km2' }, { name: 'China', area: '9640011 km2' }, ... ]
1. Špecifiká Javascriptu
Prejdeme si také súčasti jazyka JavaScript, ktoré sa v Jave nenachádzajú - globálne vs. lokálne premenné a konštanty, template strings, pravdivé a nepravdivé výrazy, rôzna práca s objektami a poľami, object destructuring, spread operátor, klasické vs. arrow funkcie a použitie this v nich.