- Pelajari
-
Ekosistem
Pertolongan
Alat
Pustaka Inti
Berita
Daftar Sumber Daya
- Tim
- Dukung Vue
- Terjemahan
Petunjuk
Esensial
- Instalasi
- Perkenalan
- Vue Instance
- Sintaks Templat
- Properti Penghitung (Computed) dan Pengamat (Watchers)
- Kelas and Binding Gaya
- Rendering Bersyarat
- Me-render Daftar
- Penanganan Event
- Form Input Bindings
- Komponen Dasar
Komponen secara mendalam
- Registrasi Komponen
- Props
- Custom Events
- Slot
- Komponen yang Dinamis & Async
- Menangani Kasus Langka
Transisi & Animasi
- Transisi Masuk/Keluar & Daftar Transisi
- Transisi State
Kebergunaan & Komposisi
- Mixins
- Direktif Kustom
- Fungsi Render & JSX
- Plugin
- Filter
Peralatan
- Komponen Berkas Tunggal
- Unit Testing
- Dukungan TypeScript
- Penempatan Produksi
Peningkatan
- Routing
- Pengelolaan State
- Rendering di Sisi Server (SSR)
Internal
- Reaktivitas Secara Mendalam
Migrasi
- Migrasi dari Vue 1.x
- Migrasi dari Vuex 0.6.x ke 1.0
Meta
- Perbandingan dengan Kerangka Kerja yang Lain
- Gabung Komunitas Vue.js!
- Tim Inti Vuejs
Sintaks Templat
Vue.js menggunakan sintaks templat berbasis HTML yang memungkinkan Anda secara deklaratif untuk binding hasil render DOM yang mendasari data dari Vue instance. Semua templat Vue.js adalah HTML yang valid yang dapat diuraikan oleh browser yang sesuai spesifikasi dan pengurai HTML.
Pada dasarnya, Vue mengkompilasi templat ke dalam fungsi render DOM Virtual. Dikombinasikan dengan sistem reaktivitas, Vue mampu secara cerdas mencari tahu jumlah minimum komponen untuk render ulang dan menerapkan jumlah minimal manipulasi DOM ketika state pada app berubah.
Jika Anda terbiasa dengan konsep DOM Virtual dan lebih suka native JavaScript, Anda juga dapat menulis langsung fungsi render sebagai pengganti templat, dengan opsi dukungan JSX.
Interpolasi
Teks
Bentuk paling mendasar dari data binding adalah interpolasi teks menggunakan sintaksis “Mustache” (kurung kurawal ganda):
<span>Pesan: {{ msg }}</span>
Tag mustache akan di ganti dengan nilai property msg
pada objek data yang sesuai. Ini juga akan diperbarui setiap kali properti objek data msg
berubah.
Anda juga dapat melakukan interpolasi satu kali yang tidak memperbarui pada perubahan data dengan menggunakan direktif v-once, tetapi perlu diingat ini juga akan mempengaruhi binding lain pada node yang sama:
<span v-once>Ini tidak akan pernah berubah: {{ msg }}</span>
Raw HTML
Tanda mustache menerjemahkan data sebagai teks biasa, bukan HTML. Untuk menghasilkan HTML asli, gunakan direktif v-html
:
<p>Menggunakan tanda mustache: {{ rawHtml }}</p>
<p>Menggunakan direktif v-html: <span v-html="rawHtml"></span></p>
Menggunakan tanda mustache: {{ rawHtml }}
Menggunakan direktif v-html:
Konten span
akan diganti dengan nilai properti rawHtml
, diterjemahkan sebagai HTML biasa - binding data diabaikan. Perhatikan bahwa Anda tidak dapat menggunakan v-html
untuk membuat parsial templat, karena Vue bukan mesin templating berbasis String. Sebaliknya, komponen lebih disukai sebagai unit dasar UI yang bisa digunakan kembali dan komposisi.
Merender HTML yang berubah-ubah secara dinamis di situs web Anda bisa sangat berbahaya karena dapat mudah terserang kerentanan XSS. Gunakan interpolasi HTML pada konten yang terpercaya dan jangan pernah pada konten yang disediakan pengguna.
Atribut
Tanda mustache tidak dapat digunakan di dalam atribut HTML. Sebagai gantinya, gunakan direktif v-bind:
<div v-bind:id="dynamicId"></div>
Pada kasus atribut tipe boolean, di mana keberadaan nilainya true
, penggunaan v-bind
sedikit berbeda. Dalam contoh ini:
<button v-bind:disabled="isButtonDisabled">Tombol</button>
Jika isButtonDisabled
bernilai null
, undefined
, atau false
, atribut disabled
tidak akan dimasukkan ke dalam elemen <button>
.
Menggunakan Ekspresi JavaScript
Sejauh ini kami hanya binding properti sederhana di templat kami. Tetapi Vue.js sebenarnya mendukung penuh ekspresi JavaScript di dalam semua binding data:
{{ number + 1 }} {{ ok ? 'YES' : 'NO' }} {{ message.split('').reverse().join('')
}}
<div v-bind:id="'list-' + id"></div>
Ekspresi ini akan dievaluasi sebagai JavaScript dalam scope data dari Vue instance. Satu batasan adalah bahwa setiap binding hanya dapat berisi satu ekspresi tunggal (one single expression), jadi yang berikut ini TIDAK akan berfungsi:
<!-- ini adalah sebuah statemen, bukan sebuah ekspresi: -->
{{ var a = 1 }}
<!-- kontrol flow tidak akan bekerja, gunakan ekspresi ternary -->
{{ if (ok) { return message } }}
Ekspresi templat adalah sandboxed dan hanya memiliki akses ke daftar putih global seperti Matematika
dan Tanggal
. Anda tidak boleh mencoba mengakses pendefinisian global dalam ekspresi templat.
Direktif
Direktif adalah atribut khusus dengan awalan v-
. Nilai atribut direktif diharapkan menjadi sebuah ekspresi JavaScript tunggal (dengan pengecualian v-for
, yang akan dibahas nanti). Tugas direktif adalah menerapkan efek pada DOM secara reaktif ketika nilai ekspresinya berubah. Mari kita lihat pada contoh terdahulu:
<p v-if="seen">Sekarang Anda bisa melihatku</p>
Di sini, direktif v-if
akan menghapus / memasukkan elemen <p>
berdasarkan kebenaran dari nilai ekspresi seen
.
Argumen
Beberapa direktif dapat mengambil sebuah “argumen”, dilambangkan dengan tanda titik dua setelah nama direktif. Misalnya, direktif v-bind
digunakan untuk memperbarui atribut HTML secara reaktif:
<a v-bind:href="url"> ... </a>
Di sini href
adalah argumen, yang memberitahukan direktif v-bind
untuk mengikat atribut href
dengan nilai ekspresi url
.
Contoh lain adalah direktif v-on
, sebagai listen event pada DOM:
<a v-on:click="doSomething"> ... </a>
Di sini argumennya adalah nama event untuk di listen. Kami akan membicarakan event handling secara lebih rinci.
Argumen Dinamis
Terbaru di 2.6.0+
Mulai versi 2.6.0, juga dimungkinkan untuk menggunakan ekspresi JavaScript dalam argumen direktif dengan membungkusnya dengan tanda kurung:
<a v-bind:[namaAtribut]="url"> ... </a>
Di sini namaAtribut
akan dievaluasi secara dinamis sebagai ekspresi JavaScript, dan nilainya yang dievaluasi akan digunakan sebagai nilai akhir untuk argumen. Misalnya, jika instance Vue Anda memiliki properti data, namaAtribut
, yang nilainya "href"
, maka binding ini setara dengan v-bind:href
.
Demikian pula, Anda bisa menggunakan argumen dinamis untuk binding sebuah handler pada nama event yang dinamis:
<a v-on:[namaEvent]="doSomething"> ... </a>
Demikian pula, ketika nilai dari namaEvent
adalah "focus"
, misalnya, v-on:[namaEvent]
akan setara dengan v-on:focus
.
Batasan Nilai Argumen Dinamis
Argumen dinamis diharapkan untuk mengevaluasi ke string, dengan pengecualian null
. Nilai khusus null
dapat digunakan untuk menghapus binding secara eksplisit. Nilai non-string lainnya akan memicu sebuah peringatan.
Batasan Ekspresi Argumen Dinamis
Ekspresi argumen dinamis memiliki beberapa batasan sintaksis karena karakter tertentu tidak valid di dalam nama atribut HTML, seperti spasi dan kutipan. Anda juga harus menghindari huruf besar saat menggunakan templat di-DOM
Misalnya, berikut ini tidak valid:
<!-- Ini akan memicu peringatan kompiler. -->
<a v-bind:['foo' + bar]="value"> ... </a>
Solusinya adalah menggunakan ekspresi tanpa spasi atau tanda kutip, atau mengganti ekspresi kompleks dengan properti computed.
Selain itu, jika Anda menggunakan templat di-DOM (templat yang langsung ditulis dalam file HTML), Anda harus menyadari bahwa browser akan memaksa nama atribut menjadi huruf kecil:
<!-- Ini akan dikonversi menjadi v-bind: [someattr] di templat di-DOM. -->
<a v-bind:[someAttr]="value"> ... </a>
Modifier
Modifier (pengubah) adalah postfixes khusus yang dilambangkan dengan titik, yang menunjukkan bahwa direktif harus dibinding dengan cara tertentu. Misalnya, pengubah .prevent
memberitahu direktif v-on
untuk memanggil event.preventDefault()
pada event yang dipicu:
<form v-on:submit.prevent="onSubmit">...</form>
Anda akan melihat contoh modifier lain nanti, untuk v-on
dan untuk v-model
, ketika kami menjelajahi fitur-fitur tersebut.
Singkatan
Awalan v-
berfungsi sebagai isyarat visual untuk mengidentifikasi atribut spesifik Vue di templat Anda. Ini sangat berguna ketika Anda menggunakan Vue.js untuk menerapkan perilaku (behavior) yang dinamis pada beberapa markup yang ada, tetapi dapat terasa tepat untuk beberapa direktif yang sering digunakan. Pada saat yang sama, kebutuhan awalan v-
menjadi kurang penting ketika Anda membangun SPA, di mana Vue mengelola setiap templat. Oleh karena itu, Vue menyediakan singkatan khusus untuk dua direktif yang paling sering digunakan, v-bind
danv-on
:
Singkatan v-bind
<!-- full syntax -->
<a v-bind:href="url"> ... </a>
<!-- singkatan -->
<a :href="url"> ... </a>
<!-- singkatan dengan argumen dinamis (2.6.0+) -->
<a :[key]="url"> ... </a>
Singkatan v-on
<!-- full syntax -->
<a v-on:click="doSomething"> ... </a>
<!-- singkatan -->
<a @click="doSomething"> ... </a>
<!-- singkatan argumen dinamis (2.6.0+) -->
<a @[event]="doSomething"> ... </a>
Mereka mungkin terlihat sedikit berbeda dari HTML normal, tetapi :
dan @
adalah karakter yang valid untuk nama atribut dan semua browser yang didukung Vue dapat menguraikannya dengan benar. Selain itu, mereka tidak muncul di hasil markup render. Sintaks singkatan benar-benar opsional, tetapi Anda mungkin akan mengapresiasi ketika Anda mempelajari lebih lanjut tentang penggunaannya nanti.