dobrá komunita — spousta knihoven a možnost studia
Vue lze instalovat & používat jako Node.js balíček.
Prozatím v .HTML souboru pomocí JS skriptu.
Vue používá jazyk velmi podobný HTML pro tvorbu šablon.
Verze 2 a 3.
Ahoj světe!
Práce s JS uvnitř šablony
Reaktivita
Vue automaticky hlídá na čem jsou dané elementy vázané
když se dané data změní, překreslí se daný element
Direktivy
způsob manipulace se šablonou
překladač (compiler) poté zpracuje na funkční část kódu
v podstatě atribut
začíná v-
Direktiva v-bind
vloží nějakou hodnotu dovnitř atributu na prvku
za smth uvnitř v-bind:smth se dává jméno atributu, kterému
bude nastavena hodnota
Direktiva v-if
z výrazu vyhodnotí, zda se má daný blok vykreslit
boolean hodnota / výraz
Direktiva v-model
funguje pouze na input, textarea, select
když se hodnota změní v daném inputu, změní se i jako proménná v kódu
všechny místa, kde se proměnná používá se překreslí
Vazby
Práce
Vytvořte webovou aplikace, ve které bude jeden input. Když do daného inputu napíšete Kočka, na
stránce se zobrazí kočka. Když do něj napíšete pohádku, zobrazí se pohádka.
Cykly
Při tvorbě cyklů je nutné nastavovat pomocí v-bind:key klíč jednotlivého předmětu — často index.
Proč?
Vue instance
hlavní instance nám říká, že vůbec Vue existuje
data — data, které lze používat v šabloně
created() — funkce, která se zavolá po tom, co je daná Vue
instance vytvořena
mounted() — funkce, která se zavolá po tom, co se daná Vue
instance vykreslí do stránky
destroyed() — funkce, která se zavolá po tom, co se daná Vue
instance zruší
updated() — funkce, která se zavolá po tom, co se něco ve Vue
instanci změní
Události
Události
další věc, co Vue umí je přiřadit nějakému prvku událost
když daná událost nastane, stane se něco jiného
definujeme metodu (stejně jako addEventListener)
máme k dispozici proměnou e
používatelné metody definujeme ve vlastnosti methods
Co říkáte na Vue?
Základy máte za sebou.
Nyní praxe!
Evidence koček
Práce
Vytvořte Vue aplikaci na evidenci jmen koček. Jména koček budeme moci přidávat (musí být unikátní) a odebírat. Prazdné jméno nepůjde přidat.
Evidence koček
Vytvořte Vue aplikaci na evidenci jmen koček. Jména koček budeme moci přidávat (musí být unikátní) a odebírat. Prazdné jméno nepůjde přidat.
Otázky
Práce
Rybáři
Práce
Zkrácené zápisy
Některé zápisy direktiv se často opakují a dlouhé názvy nejsou zrovna přehledné.
Místo v-bind:attr="value" můžeme psát :attr="value".
Místo v-on:event="fnc" můžeme psát @event="fnc".
Upgraded otázky
Práce
Upravte práci ze začátku hodiny Otázky tak, aby:
otázky byly náhodné
aby se ukazovalo číslo otázky / počet všech otázek
Proč jsme začali využívat Vue?
Projekty
Projekty
projekty v jednom souboru nedávají smysl
kód který používáme v scriptu není optimalizovaný pro produkci
Vue-cli
správce projektů Vue
pomocí něj vytváříme, spouštíme a sestavujeme projekty
instalujeme pomocí npm
zastaralé, ale stále se používá
Vite
správce projektů nejen pro Vue
instalace se děje automaticky, není potřeba ručně nic instalovat
Vytvoříme si projekt!
npm create vite@latest
nevybereme žádné balíčky navíce
npm install
Co znamená sestavit projekt?
Projekt
npm projekt, máme package.json i node_modules
index.html
public/
src/
src/assets
src/components
src/App.vue
src/main.js
Soubory .vue
speciální soubory
známe již z našeho jednoduchého HTML
komponenty
Komponenty
síla Vue náleží komponentám
komponenty můžeme propojovat dohromady a navazovat je
můžeme předávat data
každá komponenta má své vlastní data, které s nikým nesdílí
každá komponenta má template, script a nepovinně
style
později: další vlastnosti a funkcionality, komunikace s jinými komponentami
Každá komponenta je instancí Vue.
Můžeme tedy definovat data, methods, mounted a další.
Vlastnost components
definujeme které komponenty můžeme uvnitř této komponenty využívat
tyto komponenty musíme v JS importovat pomocí zápisu
import JmenoKomponenty from './components/JmenoKomponenty.vue'
komponenty poté můžeme vkládat pomocí zápisu tagu
<JmenoKomponenty></JmenoKomponenty>
Skripty
serve — spuštění (development)
zapneme pomocí npm run dev
na lokálním počítači spustí webový server s naší aplikací
obvykle na nějakém portu 808x
build — sestavení
spustíme pomocí npm run build
sestaví aplikaci do pár souborů, které můžeme nahrát na hosting
sestavuje se do složky dist
Styly
jednotlivým komponentám můžeme definovat styly
vložíme do souboru .vue tag style vedle tagů
template a script
tyto komponenty budou však globální právě tehdy, když se komponenta
poprvé načte
Styly scoped
označíme styly jako určené pouze pro aktuální komponentu
poté se při načtení komponenty budou používat právě tyhle styly
žádný jiný prvek na stránce k nim nebude mít přístup
props — vlastnosti
můžeme definovat na Vue instanci
definuje jaké parametry můžeme z jiných komponent předávat téhle
určujeme jméno (což bude k dispozici jako proměnná) a datový typ
např. tedy: String, Number, Object
později: pokročilá validace dat
computed — vypočítané proměnné
můžeme definovat na Vue instanci
jsou to speciální proměnné, které se mění v závislosti na jiných datech
používáte tedy jako nějaké formátovací proměnné, když nechceme
upravovat předešlé data
Azla
Práce
použití komponent
navíce: přidávání předmětů, stránkování
Jak předáme data z rodičovské komponenty do potomka?
props
props
Jak předáme data z potomka do rodičovské komponenty?
Události
events
způsob komunikace napříč komponentami
využívá se i jinde (a skoro všude) k různým účelům
ve Vue: notifikace více míst o události
Jak události fungují
událost se vyvolá na komponentě
rodič může k volání události s jménem připojit
při vyvolání se daná funkce zavolá (rodič událost zpracuje)
Vyvolání události
každá komponenta může vyvolat událost pomocí .$emit(name, data)
každé události nastavujeme pomocí parametrů jméno a nepovinně data
Zachycení
při vložení komponenty do šablony můžeme pomocí attributu v-on:name nebo @name zachytit naší událost pojmenovanou name
Hodí se události i na jiné věci než předávání si informací?
Jaké jsou nevýhody tohoto systému?
Události
Práce
Nutné: použití komponent, událostí k předávání informací o notifikaci
Jak předáme data z potomka do rodičovské komponenty?
Příště: kompozice a lepší systém k ukládání dat ve velkých aplikacích.
Opakování z minule
události — způsob komunikace mezi komponentami
zavolání — $emit(name, data)
zachycení — @name="fnc()"
Jaký problém má tento způsob předávání dat?
Kompozice
Kompozice
Composition API
nový styl tvoření komponent
odstranění možností (data, methods, ...)
vše se definuje jako jednoduchý lineární kód
znovupoužitelnost & rozšiřitelnost
původní systém (Options API) je stále k dispozici, používá však vnitřně
kompozici
Použití
metoda setup
zkrácený zápis <script setup>
V dokumentaci Vue najdete všechny stránky přeložené do Composion API.
Díky dobré rozšiřitelnosti komponent vznikl různé projekty s různými komponenty pro Composion
API, jako je např. VueUse.
Blogovací platforma
Práce
Pomocí Vue 3 a Composition API vytvořte formulář pro přidávání blogových příspěvků a jejich
zobrazení.
Jaký je rozdíl mezí ref a reactive v Composition API?
Rybáři
Práce
Options API zůstává ve Vue a neplánuje se odstraňovat.
Jaké jsou nevýhody systému Options API?
Často kombinujeme Composition API s Options API, proč?
Pinia
Pinia
knihovna na uchovávání dat
k datům mají přístup všechny komponenty
každá komponenta může data změnit očekávaným způsobem
(De)centralizované data
jaký je mezi nimi rozdíl?
centralizované — na jednom místě, spravuje nějaký nadřazený prvek
decentralizované — každá komponenta si své data spravuje sama
Jakými způsoby můžeme v komponentě uchovávat data?
Pinia
následník Vuex
používáme zejména kompozici, ostatní způsoby jsou možné
lze si představit jak globální obchod či speciální komponentu
ta má stav, uložená data
akce se volají a provádějí pokročilé úpravy dat
gettery vrací data nějak upravená
Zapnutí Pinia
nutné připojit k aplikaci app.use(createPinia())
stores definujeme většinou v /stores/
Ukázka store
Přístup
store musíme načíst v dané komponentě
celá kompozice či metoda setup
na dané proměnné máme k dispozici stav a dané akce
Použití store
Tento store může používat jakákoliv komponenta.
Vue.js devtools
(minimálně v Google Chrome)
vývojářské nástroje
dovoluje sledovat Pinia stav, události, komponenty a další
Instalace balíčků
Instalace balíčků
dvě možnosti:
přidání při vytváření projektu
přidání v již existujícím projektu
Při vytváření
při vytváření projektu — npm create vite@latest
vyberem vue-create
vybereme balíček, který chceme přidat
balíček se nainstaluje a vytvoří se potřebné soubory
Již existující
většinou nemáme automaticky možnost
instalujeme pomocí npm a vlastně konfigurujeme
Předěláme úkol Logování do Vuexu.
Co máme ve Pinia ukládat?
Co nemáme ve Pinia ukládat?
Uloží se data, když se znova přenačte stránka?
Lze řešit problém předávání dat mezi komponentami jednodušeji?
Příště vícestránkové aplikace!
Sledovače — watchers
speciální metody
mají za úkol sledovat proměnné komponenty
data, computed, props, ...
když se daná proměnná změní, zavolá se funkce
Na co by se mohli sledovače hodit?
Ukázka
Použití
při přihlašování
změna klíčových dat
Kde na svém portálu používám sledovače?
SASS uvnitř Vue
balíček (stejně jako Vuex)
můžeme psát SCSS/SASS uvnitř komponent
a nebo i globálně
instalujeme přímo při vytváření projektu — balíček sass
V komponentách
stále můžeme využívat scoped
Problém v SASS: v komponentách se špatně hledají soubory na importování.
Globálně
ve složce assets si můžeme vytvořit SASS soubory
soubory mezi sebou linkujeme
styly zapneme v souboru main.js
Zapnutí
SASS ve Vue
Práce
Zkuste si ve Vue zapnout SASS a vytvořit si základní strukturu. Tedy, soubor na proměnné, jednotlivé komponenty či sekce. Společně soubory nalinkujte a zapněte. Vaše styly otestujte.
Programové styly
styly můžeme přidávat i programově
pomocí vlastnosti style
uvnitř <template> pomocí v-bind
Programové styly
Vícestránkové aplikace
aktuální Vue co známe, má jen jednu stránku
balíček Router nám dovoluje definovat více stránek
jednotlivé stránky jsou reprezentovány jako komponenty
Normální mód potřebuje další nastavení serveru, které například není možné.
Když klikneme na odkaz z Routeru, přenačte se stránka odznova?
Jak si lze mezi jednotlivým stránkami předávat data?
Přenačtení
Práce
Vytvořte (použijte) projekt, ve kterém bude jedna stránka (routa) s jedním parametrem. Do komponenty stránky přidejte jeden text (hodnota parametru) a dvě tlačítka, kde každé bude ukazovat na aktuální stránku ale s různými parametry.
Co se stane, když budeme klikat na tlačítka? Bude se daná komponenta znovu vytvářet?
Jak lze upravit komponentu, aby reagovala na změny?