30. WebSockety - odosielanie správ a odpájanie
Dokončenie četovacieho projektu.
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.
Dokončenie četovacieho projektu.
Vysvetlíme si, ako fungujú WebSockety, čo je to STOMP, message broker, topic, SockJS a začneme vyrábať service na komunikáciu cez WebSockety.
Začneme druhou priebežnou obhajobou. Ak ani jeden člen tímu nie je prítomný v škole, tu je link na dištančnú obhajobu.
V komponente pre zobrazovanie zoznamu filmov. Zobrazíme aj detaily o filmoch v expandovateľných riadkoch a cez detské komponenty.
Vytvoríme si nový komponent na zobrazovanie zoznamu filmov. Ukážeme si, ako sa vkladá token do HTTP hlavičky. Vytvoríme si servis na získanie filmov zo servera. Vytvoríme si komponent zobrazujúci filmy v tabuľke s pagináciou, usporiadaním a filtráciou na strane servera pomocou signálov a rxResource.
Ukážeme si na príklade tabuľky používateľov použitie mat-table s jednoduchými stĺpcami mat-text-column aj zložitejšími cez mat-cell.Ukážeme si tvorbu vlastnej Pipe na zobrazovanie zoznamu skupín a práv používateľa.
Na začiatku si spravíme prvú obhajobu projektov. Ak ani jeden člen tímu nie je prítomný v škole, tu je link na dištančnú obhajobu. Vytvoríme si synchrónny validátor na zhodu hesiel registrácie. Napíšeme si asynchrónny validátor pre kontrolu konfliktu s menom a emailom na serveri.
Pridáme validátor emailov cez pattern. Nainštalujeme si knižnizu na overovanie sily hesla 'zxcvbn-ts' a použijeme ju vo vlastnom validátore.
Vytvoríme si komponent na registráciu používateľov a zrealizujeme neoverenú registráciu. Ukážeme si zabudované validátory, aj ako ich aktivovať v template-driven formulároch. Predstavíme si alternatívnu formu prepojenia DOM modelu a dát - reaktívne formuláre. Porovnáme ich s template-driven prístupom.
Dorobíme službu na výpis úspechových a chybových stavov. Vytvoríme si tiež Angular knižnicu, pošleme ju do repozitára NPMJS a použijeme ju v projekte. Dorobíme menu a funkciu odhlásenia. Vyskúšame si signály.
Strážcovia Resolver, CanMatchFn. Začneme nový projekt na správu používateľov a filmov v Angular 19. Tentoraz však nebudeme používať Bootstrap, ale použijeme knižnicu komponentov v Material dizajne, začneme Login komponentom.
Strážcovia CanActivateFn, CanActivateChildFn, CanDeactivateFn
Vytvoríme si hierarchické routovanie modulu pre skupiny. Vyskúšate si sami vytvoriť editačný komponent na pridanie skupiny. Dorobíme komponent na pridanie skupiny a využijeme ho aj na editáciu skupiny.
Dokončíme editáciu používateľa. Vytvoríme si feature modul na prácu so skupinami, nastavíme mu vlastné routovanie a natiahneme ho lazy štýlom do routra. Ukážeme si parametrické pravidlo pre router a prijatie parametra v komponente.
Ukážeme si vytvorenie pomocného modelu pre zoznam checkboxov. Predstavíme si niekoľko validačných direktív a validačné hodnoty, ktoré sú použiteľné pre vizualizáciu. Zrealizujeme mazanie používateľa aj s jednoduchým konfirmačným oknom. Vysvetlíme si použitie komunikácie komponentov rodič-dieťa cez @Input a @Output premenné. Použijeme novú metódu životného cyklu ngOnChanges(), ktorá je volaná, keď sa zmenia @Input premenné.
Spravíme si refaktor: Službu na úspechové aj chybové správy cez RXJS Subject a spracovanie HTTP chybových hlášok. Prichystáme detský komponent na pridávanie a editáciu používateľa.
Uložíme sme si token v localStorage, ktorý prežije aj zmenu URL "zvonku". Ukážeme si navigáciu zo šablóny tak, aby sme nekontaktovali server. Upravíme si navigačnú lištu tak, že vždy ukazuje správne stav prihlásenia a zrealizujeme odhlásenie na strane klienta.
Odchytíme chyby v Observable a nahradíme ich iným prúdom, rozšírime si používateľov o skupiny, použijeme token na získanie rozšírených používateľov a zobrazíme si ich v tabuľke. Na záver si vytvoríme navigáciu na stránku.
Vytvoríme si komponent na prihlasovanie a spracujeme prihlásenie v službe. Odchytíme chyby v servise a zobrazíme ich v komponente. Vysvetlíme si princíp routingu, nastavíme základný router aj s presmerovaním a odchytením všetkých zlých URL adries.
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:
Vytvoríme si Angular projekt, vysvetlíme si základnú štruktúru, porozprávame si o entitách a princípe MVC v komponentoch.
Budeme pracovať s JSON dokumentmi získanými z adresy https://swapi.dev/ podľa úloh uvedených nižšie.
Úlohy:
[ 'Luke Skywalker', 'C-3PO', 'R2-D2', 'Darth Vader',... ]
[ 'Ackbar', 'Adi Gallia', 'Anakin Skywalker', 'Arvel Crynyd', 'Ayla Secura',... ]
[ 'Ackbar', 'Mas Amedda', 'Padmé Amidala', 'Wedge Antilles', 'Raymus Antilles',... ]
[ 'Yoda', 'Bossk', 'C-3PO', 'IG-88', 'Lobot', 'R2-D2', 'Han Solo', ... ]
[ { name: 'Luke Skywalker', specimen: [] }, { name: 'C-3PO', specimen: [ 'Droid' ] }, { name: 'R2-D2', specimen: [ 'Droid' ] }, { name: 'Darth Vader', specimen: [] },... ]
[ { 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: [] },...]
[ { planet: 'Tatooine', species: [ 'Droid' ] }, { planet: 'Alderaan', species: [ 'Human' ] }, { planet: 'Yavin IV', species: [] }, ... { planet: 'Naboo', species: [ 'Droid', 'Gungan', 'Human' ] }, ...]
Budeme pracovať s JSON dokumentom countries.json podľa úloh uvedených nižšie.
Úlohy:
{ Pashto: 27657145, Uzbek: 59233545, Turkmen: 32408265, Swedish: 15415580, ...}
[ { language: 'Pashto', count: 27657145 }, { language: 'Uzbek', count: 59233545 }, { language: 'Turkmen', count: 32408265 }, ...]
English: 2.655 mld Chinese: 1.414 mld Hindi: 1.296 mld ...
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:
[ { 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 }, ... ]
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:
[ { 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'}, ... ]
{ Spanish: ['Argentina', 'Bolivia (Plurinational State of)', 'Chile',...], Portuguese: [ 'Brazil' ], English: [ 'Falkland Islands (Malvinas)', 'Guyana',...], ... }
[ { language: 'Spanish', countries: ['Argentina', 'Bolivia (Plurinational State of)', 'Chile',...]}, { language: 'Portuguese', countries: [ 'Brazil' ]}, { language: 'English', countries: [ 'Falkland Islands (Malvinas)', 'Guyana',...]}, ... ]
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. Vysvetlíme si základné higher-order funkcie v poliach - forEach, filter, map, flat, flatMap, reduce a reduceRight. Budeme pracovať s JSON dokumentom countries.json podľa úloh uvedených nižšie.
Úlohy:
[ { name: 'Bangladesh', area: '147570 km2' }, { name: 'Brazil', area: '8515767 km2' }, { name: 'China', area: '9640011 km2' }, ... ]
Samostatne si zopakujte tému CSS, so špeciálnym zameraním na poziciovanie a responzívny dizajn (Flexbox, Grid, @media)
Riešenie nasledovných úloh zašlite cez classrom githubu do piatka 27.septembra 2024. Na stránke má fungovať navigácia na stránky domov, kompostovanie a kompostovanie_galeria a výsledné HTML má byť validné. Pre CSS majú platiť nasledovné vlastnosti:
Zvýrazníme vybranú položku v menu. Vygenerujeme novinky a pagináciu. Dorobíme HTML pre galériu kompostovania.
Dodáme dynamiku do menu tak, že obsah menu určuje JSON súbor. Spojazdníme zmenu jazykov.
Na začiatku si spoločne zladíme HTML zo zadania z minulého stretnutia. Spravíme dynamický web s pomocou EJS: Rozkrájame stránku na hlavičku, pätičku, bočnú navigáciu a hlavný obsah. Zobrazíme správnu podstránku v závislosti od url adresy.
Upravíme stránku Ranča Transylwahnja. Pridáme sémantické elementy a mikrodáta.