Vlastní návyky

Pět návrhů je dobrý začátek, ale aplikace by měla zvládnout i vaše vlastní návyky. Pod seznam přijde formulář s textovým polem a tlačítkem Přidat, postavený jako v lekci Formuláře:

<form @submit.prevent="pridejNavyk">
    <input v-model.trim="novyNazev" placeholder="Nový návyk">
    <button>Přidat</button>
</form>
<p v-if="chybaNazvu" class="chyba">{{ chybaNazvu }}</p>

v-model.trim ukládá, co napíšete, do refu novyNazev, bez mezer na začátku a na konci. Formulář odešle jeho tlačítko nebo Enter v textovém poli a .prevent zařídí, že prohlížeč stránku znovu nenačte a aplikace nezačne od začátku. Práci tak odvede pridejNavyk:

function pridejNavyk() {
    if (novyNazev.value === "") {
        chybaNazvu.value = "Napište název návyku.";
        return;
    }
    navyky.value.push({
        id: Date.now(),
        nazev: novyNazev.value,
        ikona: "⭐",
        hotovo: false,
    });
    novyNazev.value = "";
    chybaNazvu.value = "";
}

Nový návyk potřebuje id, které nemá žádný jiný, kvůli :key i kvůli prepni(). Date.now(), které znáte z miniprojektu Rozpočet, vrátí počet milisekund od začátku roku 1970, třeba 1793980800000. Každou milisekundu je to jiné číslo a dva návyky v jedné milisekundě nikdo nepřidá, takže z něj je dobré id. Nový návyk dostane jako ikonu hvězdičku a zatím není splněný.

Díky .trim se z názvu, který je jen z mezer, stane "", takže funkce místo prázdného návyku ukáže chybu a return ji ukončí. Když je název v pořádku, funkce návyk přidá a smaže chybu i název: novyNazev se změní na "" a v-model podle něj vyprázdní i textové pole.

Pokyny

  1. Přidejte refy novyNazev a chybaNazvu (oba ref("")) a funkci pridejNavyk() z ukázky, zatím bez if na jejím začátku. V šabloně dejte formulář a odstavec pod seznam, dovnitř <template v-else>. Přidejte návyk: objeví se na konci seznamu a textové pole je zase prázdné.

  2. Na začátek funkce pridejNavyk() přidejte if. Klikněte na Přidat s prázdným textovým polem: objeví se červená zpráva a žádný návyk nepřibude. Přidejte skutečný návyk a zpráva zmizí.