指令
指令(Directive)是樣板上以 v- 開頭的特殊屬性,用來把資料接到 DOM 行為。最常用的幾個就涵蓋大部分畫面。官方:Template Syntax、Conditional Rendering、List Rendering。
條件:v-if 與 v-show
<p v-if="error">{{ error }}</p>
<p v-else-if="loading">載入中…</p>
<p v-else>完成</p>
<div v-show="isOpen">抽屜內容</div>
v-if 為 false 時不會渲染該節點(連同裡面的元件一併卸載)。v-show 只切 display: none,適合頻繁開關。v-else / v-else-if 必須緊接在 v-if 後面。
列表:v-for
:key 必須穩定且唯一,讓 Vue 能對上「同一個項目」而不是只靠位置。不要用 index 當 key(除非清單不會重排、插入、刪除)。
也可解構:v-for="(item, index) in items"。物件則是 v-for="(value, key) in object"。
v-if 與 v-for 不要寫在同一個元素上。要過濾清單,先用 computed 算出陣列,再 v-for。
class 與 style
物件與陣列都能綁:
<div :class="{ active: isActive, disabled: isDisabled }"></div>
<div :style="{ color: textColor, fontSize: size + 'px' }"></div>
靜態 class 可與動態並存:<div class="btn" :class="extra">。
其他常用指令
| 指令 | 用途 |
|---|---|
v-html |
插入 HTML 字串。只用於信任的內容,否則有 XSS 風險 |
v-text |
等同設定文字內容,多數情況用 {{ }} 即可 |
v-once |
只渲染一次,之後資料變了也不更新 |
v-pre |
跳過編譯,原樣顯示 {{ }} |
v-cloak |
編譯完成前隱藏未編譯樣板(搭配 CSS) |
v-bind、v-on、v-model 見 樣板語法。自訂指令較少用,等核心熟了再查 Custom Directives。
推薦影音
Vue 樣板語法:流程控制,判斷式與迴圈
來源:彭彭的課程
繁中示範 v-if/v-else 與 v-for。對應本頁條件與列表兩節。
Vue JS 3 Tutorial #3 — Vue.js Basics (part 2)
來源:Net Ninja 約 34 分鐘
英文帶 v-for、動態 v-bind 與更多事件。看完可對照本頁 class/style 綁定。