Tlačítko, které počítá
Data se zatím za běhu aplikace neměnila. V aplikacích se ale mění pořád: zákazník si přidá do objednávky espresso a číslo na stránce se zvýší. Tady je tlačítko, které přesně tohle dělá:
<script setup>
import { ref } from "vue";
const pocet = ref(0);
function pridejEspresso() {
pocet.value++;
}
</script>
<template>
<button @click="pridejEspresso">Přidat espresso</button>
<p>Počet espress v objednávce: {{ pocet }}</p>
</template>V kódu jsou tři nové věci:
import { ref } from "vue";si vezme z Vue funkciref, aby ji skript mohl použít, stejně jako simain.jsberecreateApp.ref(0)vytvoří ref, hodnotu, kterou Vue hlídá, tady s počáteční hodnotou 0. Ve skriptu je hodnota vpocet.value, a proto funkce zvyšujepocet.value. V šabloně stačí napsat{{ pocet }}, bez.value.@click="pridejEspresso"spustí funkcipridejEspressopři každém kliknutí na tlačítko, jako to v kurzu JavaScriptu dělaladdEventListener("click", pridejEspresso).
Nejdůležitější je ale to, co v kódu chybí: žádný řádek nedává nové číslo na stránku. Když se pocet.value změní, Vue aktualizuje každé místo v šabloně, které pocet ukazuje. V kurzu JavaScriptu jste po každé změně museli sami změnit textContent a snadno se na to zapomnělo.
Proč ref a .value? S obyčejnou proměnnou, let pocet = 0;, by se číslo také změnilo, jenže Vue se o tom nedozví a stránka bude dál ukazovat 0. Jak refy fungují, vysvětlí lekce Stav a události, kde se také naučíte mnohem víc o událostech. Zatím stačí postup napodobit.
Jak psát:
Pokyny
- 1
Objednávka má ukazovat i cenu. V
<script setup>vytvořte podpocetdruhý ref:const celkem = ref(0);Na konec šablony přidejte odstavec, který ho ukáže:
<p>Celkem: {{ celkem }} Kč</p>. Klikněte na Spustit: stránka ukážeCelkem: 0 Kč. - 2
Espresso stojí 55 Kč, takže každé kliknutí má k celkové ceně přičíst 55. Do funkce
pridejEspressopřidejte řádekcelkem.value += 55;. Klikněte několikrát na tlačítko: obě čísla rostou.