Rumah  >  Artikel  >  hujung hadapan web  >  Ketahui teg templat semasa membuat borang interaktif dalam komponen web (Belajar Modulo.js - Bahagian f

Ketahui teg templat semasa membuat borang interaktif dalam komponen web (Belajar Modulo.js - Bahagian f

Barbara Streisand
Barbara Streisandasal
2024-10-05 06:19:29611semak imbas

? Hey all, welcome back this week! Each tutorial is self-contained, so feel free to start at the beginning, or just plunge in here.

Note: Due to a bug with Dev.To, I'm unable to publish this tutorial normally. The fenced code blocks do not support template syntax, causing the markdown parser to crash.

Introducing: The NewsletterSubscribe Component

Learn template-tags while creating interactive forms in a web component (Learn Modulo.js - Part f

In Part 6, we'll be creating a custom, interactive sign-up form that only shows the newsletters to subscribe when the user chooses. This will give us practice with some very useful techniques, while building up our knowledge of template-tags, a core concept in templating.

Starting snippet

In this tutorial, we will start with Props, just like with the PictureFrame component in Part 2.

As with previous tutorials, you can simply copy and paste this code into any HTML file to start:


<template Modulo>
    <Component name="NewsletterSubscribe">
        <Template>
            <form method="POST">
                <h2>Learn Modulo.js - Sign-Up Component</h2>
                <label><strong>Email:</strong><input [state.bind] name="email" /></label>
                <label>
                    <input [state.bind] name="subscribe" type="checkbox" />
                    I want to subscribe to receive news and special offers
                </label>
                <label>
                    <input [state.bind] name="newsletters.kombucha" type="checkbox" />
                    Kombucha Enthusiast Newsletter
                </label>
                <button>Submit</button>
            </form>
        </Template>
        <State
            email=""
            subscribe:=false
            newsletters:={}
            newsletters.kombucha:=true
            newsletters.soda:=false
            newsletters.wine:=true
            newsletters.beer:=false
        ></State>
    </Component>
</template>
<script src="https://unpkg.com/mdu.js"></script>
<x-NewsletterSubscribe></x-NewsletterSubscribe>


Important things to note: Look at how "State" is set-up. Do you see how newsletters:={} assigns to a JavaScript Object (designated with {}), and how then kombucha, soda, wine, and beer are all assigned with the syntax newsletters.kombucha, etc? This creates an Object that ends up looking like: { "kombucha": true, "soda": false ... }. This is a short-hand in Modulo for creating such objects. Also, note how name="newsletters.kombucha" must specify the full name, including the dot (.), to access that true/false value.

Introducing Part 6: Template Tags

In addition to filters, the Modulo templating language also support powerful "template tags", which allow for more complicated custom behavior. This includes the next two topics in this tutorial: "if" template-tag, which allows for conditional rendering (e.g. "only show the submit button if a form is filled correctly", or "only show the modal if the user has clicked the button"), and the "for" template-tag, which allows for HTML to be repeated for each item of some given data (e.g. "every blog post gets it's own

  • element", or "every field of data gets it's own form field").

    Syntax

    Unlike template variables or filters, they use {% and %} (instead of {{ and }}) to designate where they are in the Template code. Template tags are in the format of {% tag %}. They allow for more complicated transformations to the HTML code generated. For example, here are a few: {% include other_template %} {% comment %} ... {% endcomment %}

    The if-tag

    One of the most useful template tags you will use is the if tag, written like this: {% if %}. The if-tag allows for conditional rendering of HTML code based on the condition supplied.

    See below for two examples of using the "if" tag:

    {% if state.expanded %}

    Details: {{ props.details }}


  • {% endif %}
    {% if props.link %}
    Baca lebih lanjut...
    {% lain %}
    (Tiada pautan disediakan)
    {% endif %}

    Perhatikan bahawa terdapat dua teg lain dalam campuran. Ini berkaitan dengan teg if, dan hanya akan muncul selepas teg if. Yang pertama ialah teg {% endif %}. Ini diperlukan, kerana ia menunjukkan Modulo perkara yang anda mahu teg if disertakan secara bersyarat. Yang kedua ialah teg {% else %}. {% else %} adalah pilihan, seperti yang dibuktikan oleh contoh pertama: Anda tidak memerlukannya untuk semua penggunaan teg if.

    Langkah 1: Secara pilihan, tunjukkan kotak semak Kombucha

    Mari kita mulakan dengan pernyataan if berdasarkan state.subscribe. Logiknya ialah jika pengguna tidak mahu melanggan sama sekali, kami tidak sepatutnya menunjukkan pilihan surat berita tambahan. Kita boleh mencapainya dengan perkara berikut:

    {% if state.subscribe %}

    {% endif %}

    Ini kini hanya akan menunjukkan pilihan untuk memilih surat berita apabila anda mengklik "langgan".

    Langkah 2: Gunakan "lain" untuk menunjukkan petunjuk tentang mengisi e-mel

    Sekarang, mari berlatih menggunakan pernyataan if yang lebih kompleks untuk menunjukkan pembayang dan bukannya butang borang "langgan", sehingga mereka mula menaip beberapa aksara. E-mel tidak boleh (mungkin) lebih pendek daripada 4 aksara, jadi mari kita gunakan itu sebagai penahan ambang. Kita boleh menggunakan operator lt (kurang daripada, a.k.a. <) untuk membandingkan. Lihat di bawah:

    {% jika state.email|panjang lt 4 %}

    Petunjuk: Mulakan dengan memasukkan e-mel anda


    {% lain %}
    (... borang langgan pergi di sini ...)
    {% endif %}

    Langkah 3: Gunakan gelung untuk menyenaraikan surat berita

    Mari kita mulakan dengan "ujian" gelung mudah, dan kemudian kita akan mengembangkannya dalam langkah seterusnya:

    {% untuk kunci, nilai dalam state.newsletters %}

    {% tamat untuk %}

    Nota Penting: Sentiasa letakkan teg templat anda di dalam nilai HTML anda! Jangan lakukan sesuatu seperti {% if value %}style="color: blue"{% endif %}, sebaliknya lakukan style="{% if value %}color: blue{% endif %}". Jika tidak, {% dan seumpamanya boleh ditafsirkan sebagai atribut tanpa nilai, kod anda akan bersepah dengan {%="".

    Langkah 4: Menambah semula input

    Ini akan melingkari setiap surat berita dan menjadikannya hijau jika "nilai" adalah benar. Walau bagaimanapun, ia tidak akan mencipta input togol. Kita perlu menggunakan sifat {{ key }} di dalam atribut name=. Periksa tweak berikut pada input:

    Letakkan ini di dalam gelung untuk, dan ia akan menjana kotak pilihan secara automatik, tidak kira berapa banyak surat berita yang mungkin anda miliki!

    - Contoh Lengkap

    Akhir sekali, kami menyusun segala-galanya, menambah |capfirst untuk pemformatan, dan melontarkan dalam bahagian Gaya dengan beberapa penggayaan yang sangat asas, untuk menjadikan borang kelihatan lebih baik sedikit, dan kami berakhir dengan keputusan akhir. Sila salin dan tampal yang berikut untuk mencubanya:

    Disebabkan pepijat dengan Dev.To, saya tidak boleh memasukkan kod sumber. Walau bagaimanapun, anda boleh melihatnya dalam Intisari berikut:

    https://gist.github.com/michaelpb/9bac99ba0985859742961c3d1e1f310a

    Kesimpulan

    Dalam bahagian ini, kami berlatih menggunakan teg templat untuk membuat borang yang lebih mesra pengguna. Dalam tutorial seterusnya, kami akan mula menggali beberapa kekuatan Modulo, dengan jenis data, StaticData dan penyepaduan API, jadi pastikan anda mengikuti untuk mengetahui cara menulis kod deklaratif untuk menyambung API dalam hanya satu beberapa baris!

    Atas ialah kandungan terperinci Ketahui teg templat semasa membuat borang interaktif dalam komponen web (Belajar Modulo.js - Bahagian f. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Artikel sebelumnya:Menguasai Janji JavaScript: Panduan untuk Polyfill dan Teknik LanjutanArtikel seterusnya:Menguasai Janji JavaScript: Panduan untuk Polyfill dan Teknik Lanjutan

    Artikel berkaitan

    Lihat lagi