Vue.js的模板語(yǔ)法詳解
Vue.js 模板語(yǔ)法
Vue.js 使用了基于 HTML 的模版語(yǔ)法,允許開發(fā)者聲明式地將 DOM 綁定至底層 Vue 實(shí)例的數(shù)據(jù)。
Vue.js 的核心是一個(gè)允許你采用簡(jiǎn)潔的模板語(yǔ)法來(lái)聲明式的將數(shù)據(jù)渲染進(jìn) DOM 的系統(tǒng)。
結(jié)合響應(yīng)系統(tǒng),在應(yīng)用狀態(tài)改變時(shí), Vue 能夠智能地計(jì)算出重新渲染組件的最小代價(jià)并應(yīng)用到 DOM 操作上。
使用“Mustache”語(yǔ)法 (即用雙大括號(hào)包裹) 的文本插值:
<span>Message: {{ msg }}</span>
Mustache 標(biāo)簽將會(huì)被替代為對(duì)應(yīng)數(shù)據(jù)對(duì)象上 “msg” 屬性的值。無(wú)論何時(shí),綁定的數(shù)據(jù)對(duì)象上 msg 屬性發(fā)生了改變,插值處的內(nèi)容都會(huì)更新。
如果使用 v-once 指令,你也能執(zhí)行 一次性插值 ,當(dāng)數(shù)據(jù)改變時(shí),插值處的內(nèi)容不會(huì)更新。但請(qǐng)留心這會(huì)影響到該節(jié)點(diǎn)上的其它數(shù)據(jù)綁定。
HTML
直接用雙大括號(hào)包裹只是普通文本,如果想實(shí)現(xiàn)HTML代碼效果,需要加入 v-html 指令
html部分:
<div id="app">
<p>Using mustaches: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>
</div>
js部分:
var vm = new Vue({
el:'#app',
data:{
rawHtml:'<span style="color:red">this is red</span>'
}
});
v-html使用時(shí) 在span標(biāo)簽的前標(biāo)簽內(nèi)寫入“v-html="xxx” ,相當(dāng)于將data中的值以HTML形式放入span標(biāo)簽內(nèi)。
attribute(屬性)
Mustache 語(yǔ)法不能作用在 HTML attribute 上,遇到這種情況應(yīng)該使用 v-bind 指令:
格式:v-bind:屬性="變量名"
html部分:
<div v-bind:color="textcolor">123</div>
js部分:
data:{
textcolor:"red"
}
將變量textcolor的值“red"綁定在盒子的 "color" 屬性上

對(duì)于布爾屬性,v-bind使用為:
<button v-bind:disabled="isButtonDisabled">Button</button>
如果 isButtonDisabled 的值是 null、undefined 或 false ,則 disabled attribute 甚至不會(huì)被包含在渲染出來(lái)的 <button> 元素中。
JS表達(dá)式
迄今為止,在我們的模板中,我們一直都只綁定簡(jiǎn)單的屬性鍵值。但實(shí)際上,對(duì)于所有的數(shù)據(jù)綁定,Vue.js 都提供了完全的 JavaScript 表達(dá)式支持。
{{ data變量 + 1 }} //
{{ data變量/表達(dá)式 ? 'true代碼' : 'false代碼' }} //三元運(yùn)算
{{ data變量.split('').reverse().join('') }} //可以進(jìn)行函數(shù)調(diào)用
<div v-bind:id="'list-' + id"></div>
這些表達(dá)式會(huì)在所屬 Vue 實(shí)例的數(shù)據(jù)作用域下作為 JavaScript被解析。
限制是:每個(gè)綁定都只能包含單個(gè)表達(dá)式,所以下面的例子都不會(huì)生效。
<!-- 這是語(yǔ)句,不是表達(dá)式 -->
{{ var a = 1 }}
<!-- 流控制也不會(huì)生效,請(qǐng)使用三元表達(dá)式 -->
{{ if (ok) { return message } }}
指令
指令 (Directives) 是帶有 v- 前綴的特殊 attribute。指令 attribute 的值預(yù)期是單個(gè) JavaScript 表達(dá)式 。指令的職責(zé)是, 當(dāng)表達(dá)式的值改變時(shí),將其產(chǎn)生的連帶影響,響應(yīng)式地作用于 DOM。 回顧我們?cè)诮榻B中看到的例子:
<p v-if="seen">現(xiàn)在你看到我了</p>
這里,v-if 指令將根據(jù)表達(dá)式 seen 的值的真假來(lái)插入/移除 <p> 元素。
參數(shù)
一些指令能夠接收一個(gè)“參數(shù)”,在指令名稱之后以冒號(hào)表示。例如, v-bind 指令可以用于響應(yīng)式地更新 HTML屬性值:
<a v-bind:href="url" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >...</a>
在這里 href 是參數(shù) ,告知 v-bind 指令將該元素的 href attribute 與表達(dá)式 url 的值綁定。
另一個(gè)例子是 v-on 指令,它用于監(jiān)聽 DOM 事件:
<a v-on:click="doSomething">...</a>
在這里參數(shù)是監(jiān)聽的事件名。
動(dòng)態(tài)參數(shù)
可以動(dòng)態(tài)的綁定不同的屬性,可以用 方括號(hào) 括起來(lái)的 JavaScript 表達(dá)式作為一個(gè)指令的參數(shù):
<!-- 注意,參數(shù)表達(dá)式的寫法存在一些約束,如之后的“對(duì)動(dòng)態(tài)參數(shù)表達(dá)式的約束”章節(jié)所述。 --> <a v-bind:[attributeName]="url"> ... </a>
這里的 attributeName(命名中不能有逗號(hào)或冒號(hào)等符號(hào)) 會(huì)被作為一個(gè) JavaScript 表達(dá)式進(jìn)行動(dòng)態(tài)求值,求得的值將會(huì)作為最終的參數(shù)來(lái)使用。
例如,如果你的 Vue 實(shí)例有一個(gè) data 屬性 attributeName,其值為 "href",那么這個(gè)綁定將等價(jià)于 <a v-bind:href="url" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >...</a> 。
同樣地,你可以使用動(dòng)態(tài)參數(shù)為一個(gè)動(dòng)態(tài)的事件名綁定處理函數(shù):
<a v-on:[eventName]="doSomething"> ... </a>
在這個(gè)示例中,當(dāng) eventName 的值為 "focus" 時(shí),v-on:[eventName] 將等價(jià)于 v-on:focus。
修飾符
修飾符 (modifier) 是以半角句號(hào) " . " 指明的特殊后綴,用于指出一個(gè)指令應(yīng)該以特殊方式綁定。
簡(jiǎn)寫 v-bind 縮寫
<!-- 完整語(yǔ)法 --> <a v-bind:href="url">...</a> <!-- 縮寫 --> <a :href="url">...</a>
v-on 縮寫
<!-- 完整語(yǔ)法 --> <a v-on:click="doSomething">...</a> <!-- 縮寫 --> <a @click="doSomething">...</a>
總結(jié)
以上所述是小編給大家介紹的Vue.js的模板語(yǔ)法詳解,希望對(duì)大家有所幫助!
相關(guān)文章
多個(gè)Vue項(xiàng)目部署到服務(wù)器的步驟記錄
這篇文章主要給大家介紹了關(guān)于多個(gè)Vue項(xiàng)目部署到服務(wù)器的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
vue mixins合并策略以及應(yīng)用場(chǎng)景分析
這篇文章主要介紹了vue mixins合并策略以及應(yīng)用場(chǎng)景,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
vue中計(jì)算屬性computed理解說(shuō)明包括vue偵聽器,緩存與computed的區(qū)別
這篇文章主要介紹了對(duì)vue中計(jì)算屬性computed理解說(shuō)明包括vue偵聽器,緩存與computed的區(qū)別,需要的朋友可以參考下2022-05-05
Vue3中如何修改父組件傳遞到子組件中的值(全網(wǎng)少有!)
大家都知道,vue是具有單向數(shù)據(jù)流的傳遞特性,下面這篇文章主要給大家介紹了關(guān)于Vue3中如何修改父組件傳遞到子組件中值的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
vue3+elementplus 樹節(jié)點(diǎn)過(guò)濾功能實(shí)現(xiàn)
樹節(jié)點(diǎn)所展示的街道是讀取的成都市金牛區(qū)的范圍邊界線的json文件,街道下對(duì)應(yīng)內(nèi)容市通過(guò)fetch調(diào)用接口獲取的內(nèi)容,通過(guò)mapTreeData函數(shù)循環(huán)遍歷,對(duì)數(shù)據(jù)進(jìn)行處理,這篇文章主要介紹了vue3+elementplus 樹節(jié)點(diǎn)過(guò)濾功能實(shí)現(xiàn),需要的朋友可以參考下2024-05-05
vue2從數(shù)據(jù)變化到視圖變化之diff算法圖文詳解
這篇文章主要介紹了vue2從數(shù)據(jù)變化到視圖變化之diff算法圖文詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
解決在vue的mounted中獲取對(duì)象為null問(wèn)題
這篇文章主要介紹了解決在vue的mounted中獲取對(duì)象為null問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
vue2.0和mintui-infiniteScroll結(jié)合如何實(shí)現(xiàn)無(wú)線滾動(dòng)加載
這篇文章主要介紹了vue2.0和mintui-infiniteScroll結(jié)合如何實(shí)現(xiàn)無(wú)線滾動(dòng)加載,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
vue+element實(shí)現(xiàn)輸入密碼鎖屏
這篇文章主要為大家詳細(xì)介紹了vue+element實(shí)現(xiàn)輸入密碼鎖屏,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03

