Lekce 8 - Jednoduchá kalkulačka ve Vue
V minulé lekci, Dokončení kalkulačky ve Vue, jsme dokončili kalkulačku.
V této lekci VueJS tutoriálu se zaměříme na jednoduchou kalkulačku,
která je založená na HTML select tagu. V rámci
Vue.js kurzu jsme si již dříve ukázali, jak lze s
pomocí této knihovny vytvořit poměrně složitou a vybavenou kalkulačku.
Nyní si ukážeme, jak můžeme takový úkol, pokud nám jednoduchá verze
dostačuje, zpracovat velmi snadno a rychle.
Jednoduchá kalkulačka ve Vue
Nejprve si vytvoříme novou složku a v ní soubor
SimpleCalculator.vue. Zároveň si hned můžeme definovat
funkční část kódu kalkulačky, která bude velmi podobná té minulé:
<script> export default { name: 'Calculator', data() { return { firstValue: 0, secondValue: 0, operation: 'add', result: 0, } } } </script>
Definujeme si proměnné pro dvě čísla,
firstValue a secondValue. Obě na začátku nastavíme
na nulu. Poté definujeme operaci, kterou nastavíme na "add"
(sčítat). Následně definujeme výsledek
result, který bude mít také na začátku hodnotu nula. Poté si
vytvoříme HTML strukturu:
<template> <div class="calculator"> <input v-model="firstValue" /> <input v-model="secondValue" /> <label for="operations">Vyber operaci:</label> <select name="operations" id="operations" v-model="operation"> <option value="add">Sčítat</option> <option value="subtract">Odčítat</option> <option value="multiply">Násobit</option> <option value="divide">Dělit</option> </select> <button @click="calculate()" class="calculate">Spočítat</button> <h2>{{ result }}</h2> </div> </template>
Nejdůležitější částí jsou zde dva inputy, který má každý
v-model. To je vlastnost tagů ve Vue, která
propojí obsah pole s nějakou proměnnou uvnitř
data(). Tím pádem cokoliv, co napíšeme do prvního inputu, bude
automaticky uloženo do firstValue.
Poté máme label pro výběr operace a samotný list operací, mezi kterým
si můžeme zvolit. Znovu tu uvidíme v-model, kterým propojíme
volbu k proměnné operation. Každé <option>
definujeme i value, což bude značit, čím volba naplní
proměnnou ve v-modelu.
Následně vytvoříme tlačítko, které na kliknutí funkci
calculate zavolá pomocí @click (také můžeme
použít v-on:click). Nakonec dáme do nadpisu proměnnou
result pomocí syntaxe {{ }}.
Nyní si můžeme zkusit napsat funkci calculate:
<script> export default { name: 'Calculator', data() { return { firstValue: 0, secondValue: 0, operation: 'add', result: 0, } }, methods: { calculate() { this.firstValue = parseFloat(this.firstValue) this.secondValue = parseFloat(this.secondValue) switch (this.operation) { case 'add': this.result = this.firstValue + this.secondValue break case 'subtract': this.result = this.firstValue - this.secondValue break case 'multiply': this.result = this.firstValue * this.secondValue break case 'divide': this.result = this.firstValue / this.secondValue break } this.result = Number(this.result.toFixed(4)) }, }, } </script>
Funkce převede první a druhou hodnotu z typu string na float, abychom s ní mohli počítat bez konverzí JavaScriptu, které by mohly věci pokazit.
Následným jednoduchým switchem rozhodneme, jakým
způsobem výsledek vypočítáme na základě hodnoty
proměnné this.operation. Slovíčko ´this´ musíme použít
vždy, když chceme referovat na hodnotu, která je
definovaná v data(). Následně si do
this.result vložíme výsledek operace. Nakonec
zformátujeme this.result pomocí toFixed(), abychom
měli výsledek uvedený na maximálně čtyři desetinná místa.
Pozor, v bloku switch bychom u každého
case měli uvést i break, abychom předešli
nechtěnému chování a ušetřili výkon.
A světě <div> se
, máme prakticky hotovo! Samozřejmě bychom měli aplikaci nakonec i
nějak nastylovat:
<style> @import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500&display=swap'); :root { --dark: #1a1c20; --light: #f6f6f6; } * { margin: 0; padding: 0; font-family: 'Montserrat'; font-weight: 500; font-size: 1.4rem; border-radius: 20px; } .calculator { margin: auto; margin-top: 10vh; display: flex; flex-direction: column; justify-content: space-around; background-color: var(--light); width: 20vw; height: 60vh; padding: 4% 10%; box-shadow: 0px 0px 8px lightgrey; } button, input, select { border: 3px solid var(--dark); padding: 0.5rem; outline: none; transition: 0.2s; } button:hover { color: var(--light); background-color: var(--dark); } h2 { padding-top: 2rem; font-size: 2.5rem; } </style>
V další lekci, Databázový klient ve Vue - Příprava projektu, započneme práci na databázovém klientovi ve Vue.

