vue的模板語法詳解

vue 使用了基於 HTML 的模板語法,允許開發者聲明式地將 DOM 綁定至底層 Vue 實例的數據。所有vue.js 的模板都是合法的HTML ,所以能被遵循規範的瀏覽器和 HTML 解析器解析。
在底層的實現上,Vue 將模板編譯成虛擬 DOM 渲染函數。結合響應系統,Vue 能夠智能地計算出最少需要重新渲染多少組件,並把 DOM 操作次數減到最少。如果熟悉虛擬 DOM 並且偏愛 JavaScript 的原始力量,你也可以不用模板,直接寫渲染 (render) 函數,使用可選的 JSX 語法。

  1. 插值
    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 } }}
  1. 指令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>
  1. 縮寫
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章