Template Dasar — Vue

Interpolasi Gunakan {{ }} (mustache) untuk menampilkan data di template: const nama = ref("Budi") const tahun = ref(2026) ---template--- Halo, {{ nama }}!…

Template adalah HTML milik komponen, ditambah sedikit sintaks Vue untuk menaruh data ke dalamnya. Bayangin nota yang sudah dicetak di Warung Bu Sri: "Menu: ____, Harga: Rp ____". Kasir gak menulis ulang notanya, dia cuma mengisi titik-titiknya dari catatan. Template itu nota cetakannya, dan Vue yang mengisi titik-titiknya dari data. Begitu catatannya berubah, isian di nota ikut berganti.

🧪 Tebakan cepat: Ada const url = ref("/menu") dan template <a href="{{ url }}">Lihat menu lengkap</a>. Link-nya menuju ke mana? Tebak dulu, jawabannya ada di bagian "v-bind: data ke atribut".

Interpolasi: {{ }} mengisi teks

const menu = ref("Es Teh")
const harga = ref(5000)

---template---
<div>
  <h2>{{ menu }}</h2>
  <p>Harga: Rp{{ harga }}</p>
</div>

Hasil render-nya di halaman:

<div>
  <h2>Es Teh</h2>
  <p>Harga: Rp5000</p>
</div>

Di dalam kurawal: satu ekspresi JavaScript

Isi kurawal ganda boleh lebih dari nama variabel, asal satu ekspresi: potongan kode yang menghasilkan satu nilai. Dengan data menu = "Es Teh", harga = 5000, jumlah = 3, dan stok = 0:

Di template Yang tampil
{{ menu.toUpperCase() }} ES TEH
{{ harga * jumlah }} 15000
{{ harga.toLocaleString("id-ID") }} 5.000
{{ stok > 0 ? "Ada" : "Habis" }} Habis

Teks aman: {{ }} dan v-html

const promo = ref("<b>Diskon 10%</b>")

---template---
<p>{{ promo }}</p>
<p v-html="promo"></p>
Template Yang tampil
<p>{{ promo }}</p> <b>Diskon 10%</b>, tag-nya ikut tampil sebagai teks
<p v-html="promo"></p> Diskon 10%, tebal

v-bind: data ke atribut

const url = ref("/menu")
const habis = ref(true)

---template---
<a :href="url">Lihat menu lengkap</a>
<button :disabled="habis">Pesan</button>
Yang ditulis href hasilnya
:href="url" /menu
href="url" url, teks biasa
href="{{ url }}" {{ url }}, persis tulisan itu

Link dengan href="{{ url }}" menuju alamat yang tulisannya persis {{ url }}. Itu jawaban tebakannya. Kurawal ganda cuma jalan di antara tag, gak di dalam atribut. Vue 3 gak memberi error atau warning apa pun, linknya cuma diam-diam salah.

⚠️ Jebakan yang sering ketemu

TL;DR: Template adalah HTML komponen plus sintaks Vue. {{ menu }} (interpolasi, sintaks mustache) menaruh nilai data di antara tag sebagai teks yang aman, dan ikut berubah saat datanya berubah. Isi kurawal ganda harus satu ekspresi, misalnya {{ pesan.toUpperCase() }} atau ternary {{ stok > 0 ? "Ada" : "Habis" }}, bukan if atau let. v-html memasang HTML sungguhan, jadi pakai cuma untuk konten milikmu sendiri. Atribut diikat dengan v-bind:href="url" atau singkatannya :href="url"; href="{{ url }}" cuma menghasilkan link ke tulisan {{ url }}.

Yang akan kamu pelajari