哈嘍,各位小夥伴,歡迎來到我是wangfang呀的博客!我是我是wangfang呀,雖然還在編程的“菜鳥”階段,但我已經迫不及待地想和大家分享我一路上踩過的坑和學到的小技巧。如果你也曾為bug頭疼,那麼你來對地方了!今天的內容希望能夠給大家帶來一些靈感和幫助。
前言
Vue 模板的魅力,在於你只管聲明**“頁面長這樣”**,而“怎麼讓數據和 DOM 同步”全由 Vue Runtime 接管。今天,我們把最常用、也最容易踩坑的四大塊——Mustache 插值、事件綁定、條件/列表渲染、樣式 & class 動態綁定——一次梳理透。
1. Mustache 插值 & 動態屬性綁定
1.1 Mustache({{ }})雙大括號
<span>{{ userName }}</span>
<p>今天是 {{ new Date().toLocaleDateString() }}</p>
-
特性
- 響應式:
userName改,DOM 即刻刷新 - 自動轉義:防止 XSS,想輸出 HTML 用
v-html - 可寫表達式:
三元運算符、函數調用均合法(邏輯別寫過頭)
- 響應式:
1.2 動態屬性:v-bind 或 : 簡寫
<img :src="avatarUrl" :alt="`頭像 - ${userName}`">
<button :disabled="isSubmitting">提交</button>
- 可單向綁定任意合法屬性
:class、:style有專門的對象 / 數組語法,後面詳講
2. v-on 事件綁定:DOM 事件與方法天然“連線”
<button @click="submit">提交</button>
<input @keyup.enter="save">
-
@是v-on:的糖 -
可監聽原生 DOM 事件,也支持
.enter、.stop、.prevent等事件修飾符<form @submit.prevent="onSubmit">…</form> -
傳參:
@click="like(post.id, $event)"$event永遠代表原生事件對象
3. 條件渲染 & 列表渲染:控制 DOM 的出現與循環
3.1 v-if / v-else-if / v-else
<p v-if="loading">加載中…</p>
<p v-else-if="error">出錯了</p>
<p v-else>內容搞定!</p>
-
真正銷燬 / 創建 DOM,第一次切換成本高,適合稀疏出現的塊
-
同一節點上 不可 與
v-for共存;想混用,外層包<template>:<template v-for="item in list" :key="item.id"> <li v-if="item.visible">{{ item.text }}</li> </template>
3.2 v-show
<p v-show="detailVisible">詳情</p>
- 僅切換
display:none;,DOM 不銷燬,切換頻繁場景更優
3.3 v-for 列表
<li v-for="(todo, index) in todos" :key="todo.id">
{{ index + 1 }} - {{ todo.text }}
</li>
in / of等價- 必須加唯一
:key,否則 diff 算法無法精確複用/移動節點 - 可遍歷對象:
v-for="(value, key) in obj"
4. 動態 class 與 style:寫樣式也響應式
4.1 :class
<div :class="{ active: isActive, 'text-danger': hasError }"></div>
<div :class="[activeClass, errorClass]"></div>
- 對象語法:
{ className: 布爾 } - 數組語法:動態拼接多個類名
- 普通字符串照樣支持:
:class="isActive ? 'active' : ''"
4.2 :style
<div :style="{ color: activeColor, fontSize: size + 'px' }"></div>
<div :style="[baseStyle, overrideStyle]"></div>
- 對象鍵可直接寫駝峯,或
'background-color' - 多對象數組語法方便覆蓋層次
⚠️ 常見陷阱 & Tips
| 場景 | 錯誤示例 | 正確寫法 / 解釋 |
|---|---|---|
| 插值輸出 HTML | {{ '<b>hi</b>' }} |
用 v-html="rawHtml"(注意 XSS) |
v-for 缺 key |
<li v-for="item in arr">{{item}}</li> |
<li v-for="item in arr" :key="item.id"> |
同元素同時 v-if v-for |
<li v-for="…" v-if="…"> |
用 <template> 包住 (見上) |
| 動態樣式忘單位 | :style="{ width: w }" |
:style="{ width: w + 'px' }" 或直接準備 '20px' |
| 事件寫箭頭函數 | @click="()=>count++" |
失去實例上下文;直接 @click="count++" |
🚀 Vue 模板渲染流程(簡版)
-
編譯時:
- 模板 ➜ 編譯成 渲染函數(Virtual DOM vnode)
- 靜態提升、指令解析、代碼生成
-
運行時:
- 數據變化 ➜ 依賴追蹤 觸發組件更新
- 差異比對(Virtual DOM diff) ➜ 最小量 DOM patch
-
用户只寫“模板 + 數據”,Vue 幫你把渲染 & 更新全自動化。
小結
- Mustache +
v-bind:聲明式“把數據塞進 DOM” v-on:優雅監聽 DOM 事件,修飾符加持更強- 條件 / 列表渲染:讓 DOM 有或無、列表映射都數據驅動
- 樣式 / class 綁定:CSS 也響應,交互寫起來更爽
- 記住典型“陷阱”位,避免頁面不刷新、樣式丟失、列表錯亂
掌握模板=掌握 Vue:數據哪裏來?→ 響應式;數據怎麼進 DOM?→ 模板指令;數據變了誰動?→ Vue Runtime。搞懂這條鏈,你的模板永遠有跡可循!
好啦,今天的內容就先到這裏!如果覺得我的分享對你有幫助,給我點個贊,順便評論吐個槽,當然不要忘了三連哦!感謝大家的支持,記得常回來,我是wangfang呀等着你們的下一次訪問!