vue模版語法
Vue.js 使用了基於 HTML 的模版語法,允許開發者聲明式地將 DOM 綁定至底層 Vue 實例的數據。所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循規範的瀏覽器和 HTML 解析器解析
在底層的實現上, Vue 將模板編譯成虛擬 DOM 渲染函數。結合響應係統,在應用狀態改變時, Vue 能夠智能地計算出重新渲染組件的最小代價並應用到 DOM 操作上
如果你熟悉虛擬 DOM 並且偏愛 JavaScript 的原始力量,你也可以不用模板,直接寫渲染(render)函數,使用可選的 JSX 語法
插值
文本
數據綁定最常見的形式就是使用 “Mustache” 語法(雙大括號)的文本插值:
<span>Message: {{ msg }}</span>
Mustache 標簽將會被替代為對應數據對象上 msg 屬性的值。無論何時,綁定的數據對象上 msg 屬性發生了改變,插值處的內容都會更新
通過使用 v-once 指令,你也能執行一次性地插值,當數據改變時,插值處的內容不會更新。但請留心這會影響到該節點上所有的數據綁定:
<span v-once>This will never change: {{ msg }}</span>
純html
雙大括號會將數據解釋為純文本,而非 HTML 。為了輸出真正的 HTML ,你需要使用 v-html 指令:
<div v-html="rawHtml"></div>
被插入的內容都會被當做 HTML —— 數據綁定會被忽略。注意,你不能使用 v-html 來複合局部模板,因為 Vue 不是基於字符串的模板引擎。組件更適合擔任 UI 重用與複合的基本單元
站點上動態渲染的任意 HTML 可能會非常危險,因為它很容易導致 XSS 攻擊。請隻對可信內容使用 HTML 插值,絕不要對用戶提供的內容插值
屬性
Mustache 不能在 HTML 屬性中使用,應使用 v-bind 指令:
<div v-bind:></div>
這對布爾值的屬性也有效 —— 如果條件被求值為 false 的話該屬性會被移除:
<button v-bind:disabled="someDynamicCondition">Button</button>
javascript表達式
迄今為止,在我們的模板中,我們一直都隻綁定簡單的屬性鍵值。但實際上,對於所有的數據綁定, Vue.js 都提供了完全的 JavaScript 表達式支持
{{ number + 1 }}
{{ ok ? 'YES' : 'NO' }}
{{ message.split('').reverse().join('') }}
<div v-bind:></div>
這些表達式會在所屬 Vue 實例的數據作用域下作為 JavaScript 被解析。有個限製就是,每個綁定都隻能包含單個表達式,所以下麵的例子都不會生效
{{ var a = 1 }} <!-- 這是語句,不是表達式 -->
{{ if (ok) { return message } }} <!-- 流控製也不會生效,請使用三元表達式 -->
模板表達式都被放在沙盒中,隻能訪問全局變量的一個白名單,如 Math 和 Date 。你不應該在模板表達式中試圖訪問用戶定義的全局變量
指令
指令(Directives)是帶有 v- 前綴的特殊屬性。指令屬性的值預期是單一 JavaScript 表達式。指令的職責就是當其表達式的值改變時相應地將某些行為應用到 DOM 上
<p v-if="seen">Now you see me</p>
這裏, v-if 指令將根據表達式 seen 的值的真假來移除/插入
元素
參數
一些指令能接受一個“參數”,在指令後以冒號指明。例如, v-bind 指令被用來響應地更新 HTML 屬性:
<a v-bind:href="url"></a>
在這裏 href 是參數,告知 v-bind 指令將該元素的 href 屬性與表達式 url 的值綁定
v-on 指令用於監聽 DOM 事件:
<a v-on:click="doSomething">
修飾符
修飾符(Modifiers)是以半角句號 . 指明的特殊後綴,用於指出一個指令應該以特殊方式綁定:
<form v-on:submit.prevent="onSubmit"></form>
.prevent: 提交事件不再重載頁麵
.stop: 阻止單擊事件冒泡
.self: 當事件發生在該元素本身而不是子元素的時候會觸發
.capture: 事件偵聽,事件發生的時候會調用
.once: 跟v-once作用類似,隻渲染一次,第二次不會執行
<a v-on:click.stop="doThis"></a> <!-- 阻止單擊事件冒泡 -->
<form v-on:submit.prevent="onSubmit"></form> <!-- 提交事件不再重載頁麵 -->
<a v-on:click.stop.prevent="doThat"></a> <!-- 修飾符可以串聯 -->
<form v-on:submit.prevent></form> <!-- 隻有修飾符 -->
<div v-on:click.capture="doThis">...</div> <!-- 添加事件偵聽器時使用事件捕獲模式 -->
<div v-on:click.self="doThat">...</div> <!-- 隻當事件在該元素本身(而不是子元素)觸發時觸發回調 -->
過濾器
Vue.js 允許你自定義過濾器,可被用作一些常見的文本格式化。過濾器可以用在兩個地方:mustache 插值和 v-bind 表達式。過濾器應該被添加在 JavaScript 表達式的尾部,由“管道”符指示:
{{ message | capitalize }} <!-- in mustaches -->
<div v-bind:></div> <!-- in v-bind -->
Vue 2.x 中,過濾器隻能在 mustache 綁定和 v-bind 表達式(從 2.1.0 開始支持)中使用,因為過濾器設計目的就是用於文本轉換。為了在其他指令中實現更複雜的數據變換,你應該使用計算屬性
過濾器函數總接受表達式的值作為第一個參數
new Vue({
filters: {
capitalize: function (value) {
if (!value) return ''
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
}
})
過濾器可以串聯:
{{ message | filterA | filterB }}
過濾器是 JavaScript 函數,因此可以接受參數:
{{ message | filterA('arg1', arg2) }}
這裏,字符串 'arg1' 將傳給過濾器作為第二個參數, arg2 表達式的值將被求值然後傳給過濾器作為第三個參數
縮寫
v- 前綴在模板中是作為一個標示 Vue 特殊屬性的明顯標識。當你使用 Vue.js 為現有的標記添加動態行為時,它會很有用,但對於一些經常使用的指令來說有點繁瑣。同時,當搭建 Vue.js 管理所有模板的 SPA 時,v- 前綴也變得沒那麼重要了。因此,Vue.js 為兩個最為常用的指令提供了特別的縮寫:
v-bind 縮寫
<a v-bind:href="url"></a> <!-- 完整語法 -->
<a :href="url"></a> <!-- 縮寫 -->
v-on 縮寫
<a v-on:click="doSomething"></a> <!-- 完整語法 -->
<a @click="doSomething"></a> <!-- 縮寫 -->
它們看起來可能與普通的 HTML 略有不同,但 : 與 @ 對於屬性名來說都是合法字符,在所有支持 Vue.js 的瀏覽器都能被正確地解析。而且,它們不會出現在最終渲染的標記。縮寫語法是完全可選的
最後更新:2017-06-10 12:31:53