模板語法
Vue.js 使用了基于 HTML 的模板語法,允許開發(fā)者聲明式地將 DOM 綁定至底層 Vue 實例的數(shù)據(jù)。所有 Vue.js 的模板都是合法的 HTML,所以能被遵循規(guī)范的瀏覽器和 HTML 解析器解析。
在底層的實現(xiàn)上,Vue 將模板編譯成虛擬 DOM 渲染函數(shù)。結(jié)合響應(yīng)系統(tǒng),Vue 能夠智能地計算出最少需要重新渲染多少組件,并把 DOM 操作次數(shù)減到最少。
如果你熟悉虛擬 DOM 并且偏愛 JavaScript 的原始力量,你也可以不用模板,直接寫渲染 (render) 函數(shù),使用可選的 JSX 語法。
文本
數(shù)據(jù)綁定最常見的形式就是使用“Mustache”語法 (雙大括號) 的文本插值:
<span>Message: {{ msg }}</span>
Mustache 標(biāo)簽將會被替代為對應(yīng)數(shù)據(jù)對象上?msg
?property 的值。無論何時,綁定的數(shù)據(jù)對象上?msg
?property 發(fā)生了改變,插值處的內(nèi)容都會更新。
通過使用?v-once 指令,你也能執(zhí)行一次性地插值,當(dāng)數(shù)據(jù)改變時,插值處的內(nèi)容不會更新。但請留心這會影響到該節(jié)點上的其它數(shù)據(jù)綁定
<span v-once>這個將不會改變: {{ msg }}</span>
原始 HTML
雙大括號會將數(shù)據(jù)解釋為普通文本,而非 HTML 代碼。為了輸出真正的 HTML,你需要使用?v-html?指令:
<p>Using mustaches: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>
Attribute?
Mustache 語法不能作用在 HTML attribute 上,遇到這種情況應(yīng)該使用?v-bind?指令:\
<div v-bind:id="dynamicId"></div>
對于布爾 attribute (它們只要存在就意味著值為?true
),v-bind
?工作起來略有不同,在這個例子中:
<button v-bind:disabled="isButtonDisabled">Button</button>
如果?isButtonDisabled
?的值是?null
、undefined
?或?false
,則?disabled
?attribute 甚至不會被包含在渲染出來的?<button>
?元素中。
使用 JavaScript 表達式
迄今為止,在我們的模板中,我們一直都只綁定簡單的 property 鍵值。但實際上,對于所有的數(shù)據(jù)綁定,Vue.js 都提供了完全的 JavaScript 表達式支持。
{{ number + 1 }}
{{ ok ? 'YES' : 'NO' }}
{{ message.split('').reverse().join('') }}
<div v-bind:id="'list-' + id"></div>
這些表達式會在所屬 Vue 實例的數(shù)據(jù)作用域下作為 JavaScript 被解析。有個限制就是,每個綁定都只能包含單個表達式,所以下面的例子都不會生效。
<!-- 這是語句,不是表達式 -->
{{ var a = 1 }}
<!-- 流控制也不會生效,請使用三元表達式 -->
{{ if (ok) { return message } }}
模板表達式都被放在沙盒中,只能訪問全局變量的一個白名單,如?
Math
?和?Date
?。你不應(yīng)該在模板表達式中試圖訪問用戶定義的全局變量。
指令
指令 (Directives) 是帶有?v-
?前綴的特殊 attribute。指令 attribute 的值預(yù)期是單個 JavaScript 表達式?(v-for
?是例外情況,稍后我們再討論)。指令的職責(zé)是,當(dāng)表達式的值改變時,將其產(chǎn)生的連帶影響,響應(yīng)式地作用于 DOM?;仡櫸覀冊诮榻B中看到的例子:
<p v-if="seen">現(xiàn)在你看到我了</p>
這里,v-if
?指令將根據(jù)表達式?seen
?的值的真假來插入/移除?<p>
?元素。
參數(shù)
一些指令能夠接收一個“參數(shù)”,在指令名稱之后以冒號表示。例如,v-bind
?指令可以用于響應(yīng)式地更新 HTML attribute:
<a v-bind:href="url">...</a>
在這里?href
?是參數(shù),告知?v-bind
?指令將該元素的?href
?attribute 與表達式?url
?的值綁定。
另一個例子是?v-on
?指令,它用于監(jiān)聽 DOM 事件:
<a v-on:click="doSomething">...</a>
動態(tài)參數(shù)
從 2.6.0 開始,可以用方括號括起來的 JavaScript 表達式作為一個指令的參數(shù):
<!--
注意,參數(shù)表達式的寫法存在一些約束,如之后的“對動態(tài)參數(shù)表達式的約束”章節(jié)所述。
-->
<a v-bind:[attributeName]="url"> ... </a>
這里的?attributeName
?會被作為一個 JavaScript 表達式進行動態(tài)求值,求得的值將會作為最終的參數(shù)來使用。例如,如果你的 Vue 實例有一個?data
?property?attributeName
,其值為?"href"
,那么這個綁定將等價于?v-bind:href
。
同樣地,你可以使用動態(tài)參數(shù)為一個動態(tài)的事件名綁定處理函數(shù):
<a v-on:[eventName]="doSomething"> ... </a>
在這個示例中,當(dāng)?eventName
?的值為?"focus"
?時,v-on:[eventName]
?將等價于?v-on:focus
。
對動態(tài)參數(shù)的值的約束
動態(tài)參數(shù)預(yù)期會求出一個字符串,異常情況下值為?null
。這個特殊的?null
?值可以被顯性地用于移除綁定。任何其它非字符串類型的值都將會觸發(fā)一個警告。
對動態(tài)參數(shù)表達式的約束
動態(tài)參數(shù)表達式有一些語法約束,因為某些字符,如空格和引號,放在 HTML attribute 名里是無效的。例如:
<!-- 這會觸發(fā)一個編譯警告 -->
<a v-bind:['foo' + bar]="value"> ... </a>
變通的辦法是使用沒有空格或引號的表達式,或用計算屬性替代這種復(fù)雜表達式。
在 DOM 中使用模板時 (直接在一個 HTML 文件里撰寫模板),還需要避免使用大寫字符來命名鍵名,因為瀏覽器會把 attribute 名全部強制轉(zhuǎn)為小寫:
<!--
在 DOM 中使用模板時這段代碼會被轉(zhuǎn)換為 `v-bind:[someattr]`。
除非在實例中有一個名為“someattr”的 property,否則代碼不會工作。
-->
<a v-bind:[someAttr]="value"> ... </a>
修飾符
修飾符 (modifier) 是以半角句號?.
?指明的特殊后綴,用于指出一個指令應(yīng)該以特殊方式綁定。例如,.prevent
?修飾符告訴?v-on
?指令對于觸發(fā)的事件調(diào)用?event.preventDefault()
:
<form v-on:submit.prevent="onSubmit">...</form>
在接下來對?v-on?和?v-for?等功能的探索中,你會看到修飾符的其它例子。
縮寫
v-
?前綴作為一種視覺提示,用來識別模板中 Vue 特定的 attribute。當(dāng)你在使用 Vue.js 為現(xiàn)有標(biāo)簽添加動態(tài)行為 (dynamic behavior) 時,v-
?前綴很有幫助,然而,對于一些頻繁用到的指令來說,就會感到使用繁瑣。同時,在構(gòu)建由 Vue 管理所有模板的單頁面應(yīng)用程序 (SPA - single page application)?時,v-
?前綴也變得沒那么重要了。因此,Vue 為?v-bind
?和?v-on
?這兩個最常用的指令,提供了特定簡寫:文章來源:http://www.zghlxwxcb.cn/news/detail-580356.html
v-bind?縮寫
<!-- 完整語法 -->
<a v-bind:href="url">...</a>
<!-- 縮寫 -->
<a :href="url">...</a>
<!-- 動態(tài)參數(shù)的縮寫 (2.6.0+) -->
<a :[key]="url"> ... </a>
v-on?縮寫
<!-- 完整語法 -->
<a v-on:click="doSomething">...</a>
<!-- 縮寫 -->
<a @click="doSomething">...</a>
<!-- 動態(tài)參數(shù)的縮寫 (2.6.0+) -->
<a @[event]="doSomething"> ... </a>
它們看起來可能與普通的 HTML 略有不同,但?:
?與?@
?對于 attribute 名來說都是合法字符,在所有支持 Vue 的瀏覽器都能被正確地解析。而且,它們不會出現(xiàn)在最終渲染的標(biāo)記中??s寫語法是完全可選的,但隨著你更深入地了解它們的作用,你會慶幸擁有它們。文章來源地址http://www.zghlxwxcb.cn/news/detail-580356.html
到了這里,關(guān)于VUE2教程-基礎(chǔ)-模板語法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!