vue 使用了基於 HTML 的模板語法,允許開發者聲明式地將 DOM 綁定至底層 Vue 實例的數據。所有vue.js 的模板都是合法的HTML ,所以能被遵循規範的瀏覽器和 HTML 解析器解析。
在底層的實現上,Vue 將模板編譯成虛擬 DOM 渲染函數。結合響應系統,Vue 能夠智能地計算出最少需要重新渲染多少組件,並把 DOM 操作次數減到最少。如果熟悉虛擬 DOM 並且偏愛 JavaScript 的原始力量,你也可以不用模板,直接寫渲染 (render) 函數,使用可選的 JSX 語法。
- 插值
1.1 文本
數據綁定最常見的形式就是使用“Mustache”語法 (雙大括號) 的文本插值:
<span>Message: {{ msg }}</span> //Mustache 標籤將會被替代爲對應數據對象上 msg 屬性的值。無論何時,綁定的數據對象上 msg 屬性發生了改變,插值處的內容都會更新。
通過使用 v-once 指令,你也能執行一次性地插值,當數據改變時,插值處的內容不會更新。但請留心這會影響到該節點上的其它數據綁定:
<span v-once>這個將不會改變: {{ msg }}</span>
1.2 原始html
雙大括號會將數據解釋爲普通文本,而非 HTML 代碼。爲了輸出真正的 HTML,你需要使用 v-html 指令:
<p>Using mustaches: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>
這個 span 的內容將會被替換成爲屬性值 rawHtml,直接作爲 HTML——會忽略解析屬性值中的數據綁定。注意,你不能使用 v-html 來複合局部模板,因爲 Vue 不是基於字符串的模板引擎。反之,對於用戶界面 (UI),組件更適合作爲可重用和可組合的基本單位。(站點上動態渲染的任意 HTML 可能會非常危險,很容易導致 XSS 攻擊。請只對可信內容使用 HTML 插值,絕不要對用戶提供的內容使用插值。)
1.3 特性
Mustache 語法不能作用在 HTML 特性上,遇到這種情況應該使用 v-bind 指令:
<div v-bind:id="dynamicId"></div>
在布爾特性的情況下,它們的存在即暗示爲 true,v-bind 工作起來略有不同,在這個例子中:
<button v-bind:disabled="isButtonDisabled">Button</button>
如果 isButtonDisabled 的值是 null、undefined 或 false,則 disabled 特性甚至不會被包含在渲染出來的 元素中。
1.4 使用js表達式
對於所有的數據綁定,Vue.js 都提供了完全的 JavaScript 表達式支持。
{{ number + 1 }}
{{ ok ? 'YES' : 'NO' }}//流控制需使用三元表達式
{{ message.split('').reverse().join('') }}
<div v-bind:id="'list-' + id"></div>
這些表達式會在所屬 Vue 實例的數據作用域下作爲 JavaScript 被解析。有個限制就是,每個綁定都只能包含單個表達式
下面的例子都不會生效:
<!-- 這是語句,不是表達式 -->
{{ var a = 1 }}
<!-- 流控制也不會生效,請使用三元表達式 -->
{{ if (ok) { return message } }}
- 指令Directives
指令的定義:指令帶有 v- 前綴的特殊屬性。
指令特性的值:單個JavaScript表達式r(v-for除外)
指令的職責:當表達式的值改變時,將其產生的連帶影響,響應式的作用於DOM。
//v-if 指令將根據表達式 seen 的值的真假來插入/移除 <p> 元素
<p v-if="seen">現在你看到我了</p>
2.1 參數
一些指令能夠接收一個“參數”,在指令名稱之後以冒號表示。
例如,v-bind 指令可以用於響應式地更新 HTML 特性:
//href 是參數,告知 v-bind 指令將該元素的 href 特性與表達式 url 的值綁定
<a v-bind:href="url">...</a>
- 縮寫