Vue的模板語法以及實(shí)戰(zhàn)案例
前言
相信模板語法大家多少都有所接觸,例如百度模板引擎、ejs 等等。同樣 Vue.js 也使用了基于 HTML 的模板語法,允許開發(fā)者聲明式地將 DOM 綁定至底層 Vue 實(shí)例的數(shù)據(jù)。所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循規(guī)范的瀏覽器和 HTML 解析器解析,通俗的講 Vue 模板語法就是在使用 Vue.js 開發(fā)時(shí),你可以寫在 HTML 元素上的操作語法,讓你開發(fā)更高效,例如:綁定樣式,循環(huán)出元素列表等。
一、雙大括號(hào)表達(dá)式
在前端的發(fā)展歷程中,為了提高開發(fā)效率,誕生了很多模板引擎,方便渲染元素或者綁定數(shù)據(jù),很多引擎模板都采用 {{雙大括號(hào)表達(dá)式}} 的語法進(jìn)行插值。同樣 Vue.js 也借鑒了 Angular.js 的雙花括號(hào)的方式,進(jìn)行向頁(yè)面輸出數(shù)據(jù)和調(diào)用對(duì)象方法。讓我們感受一下雙大括號(hào)表達(dá)式,在 IED 中新建一個(gè).html 后綴文件,引入 Vue.js,輸入以下代碼,運(yùn)行(open with Preview 或 Mini Browser)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title></title>
<!-- 通過cdn方式引入 vue.js -->
<script src="https://cdn.bootcss.com/vue/2.5.10/vue.min.js"></script>
</head>
<body>
<!-- 數(shù)據(jù)雙向綁定 -->
<div id="app">
<input type="text" v-model="msg" />
<p>{{msg}}</p>
</div>
<script>
var app = new Vue({
el: "#app", //el: 掛載點(diǎn)
data: {
//data:數(shù)據(jù)選項(xiàng)
msg: "hello",
},
});
</script>
</body>
</html>
雙大括號(hào)中的 {{msg}},綁定至底層 Vue 實(shí)例的數(shù)據(jù),在瀏覽器中就被渲染成實(shí)例 data 選項(xiàng)中 msg 的值。
運(yùn)行結(jié)果:

二、插值
上面初步了解了雙大括號(hào)語法,接下來我們學(xué)習(xí)一下更多的插值方式。
2.1文本
在 Vue.js 中數(shù)據(jù)綁定最常見的形式就是使用“Mustache”語法 (雙大括號(hào)) 的文本插值:
<div id="app">msg:{{msg}}</div>
雙大括號(hào)中的值將會(huì)被替代為對(duì)應(yīng) data 對(duì)象上 msg 屬性的值。無論何時(shí),綁定的數(shù)據(jù)對(duì)象上 msg 屬性發(fā)生了改變,插值處的內(nèi)容都會(huì)更新。
但是通過使用 v-once 指令你也能執(zhí)行一次性地插值,當(dāng)數(shù)據(jù) 改變時(shí),插值處的內(nèi)容 不會(huì)更新。但是你需要注意一下,該元素節(jié)點(diǎn)下面其他數(shù)據(jù)的綁定,數(shù)據(jù)改變,內(nèi)容也不會(huì)更新,所以,注意代碼塊的劃分。
<p v-once>msg:{{msg}}</p>
2.2 原始 HTML
上面的雙大括號(hào)表達(dá)式會(huì)將數(shù)據(jù)解釋為普通文本,即使你的數(shù)據(jù)為 HTML 元素,也不會(huì)渲染成對(duì)應(yīng)的標(biāo)簽元素,只能渲染成普通文本,而非 HTML 代碼,例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<!-- 通過cdn方式引入 vue.js -->
<script src="https://cdn.bootcss.com/vue/2.5.10/vue.min.js"></script>
</head>
<body>
<!-- 數(shù)據(jù)綁定 -->
<div id="app">
<p>{{msg}}</p>
</div>
<script>
var app = new Vue({
el: "#app", //el: 掛載點(diǎn)
data: {
//data:數(shù)據(jù)選項(xiàng)
msg: "<h1>hello world</h1>",
},
});
</script>
</body>
</html>
運(yùn)行結(jié)果:

上面明明我們寫的是 HTML 標(biāo)簽,為什么沒渲染出來,那就是因?yàn)殡p大括號(hào)表達(dá)式會(huì)將數(shù)據(jù)解釋為普通文本。有的讀者會(huì)問,有的需求就是要把標(biāo)簽渲染出來,那么我們就需要認(rèn)識(shí)另外一個(gè)指令 v-html,使用它我們就能將它正確渲染,試一試,代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<!-- 通過cdn方式引入 vue.js -->
<script src="https://cdn.bootcss.com/vue/2.5.10/vue.min.js"></script>
</head>
<body>
<!-- v-html 渲染html元素-->
<div id="app" v-html="msg"></div>
<script>
var app = new Vue({
el: "#app", //el: 掛載點(diǎn)
data: {
//data:數(shù)據(jù)選項(xiàng)
msg: "<h1>hello world</h1>",
},
});
</script>
</body>
</html>

2.3 特性
雙大括號(hào)語法不能作用在 HTML 特性(標(biāo)簽屬性)上,需要對(duì)標(biāo)簽屬性操作,應(yīng)該使用 v-bind 指令:
<div v-bind:class="syl-vue-course"></div>
HTML 標(biāo)簽屬性為布爾特性時(shí),它們的存在表示為 true,v-bind 工作起來略有不同,在這個(gè)例子中:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>vue</title>
<!-- 通過cdn方式引入 vue.js -->
<script src="https://cdn.bootcss.com/vue/2.5.10/vue.min.js"></script>
</head>
<body>
<!-- 布爾特性綁定-->
<div id="app">
<input type="checkbox" v-bind:checked="isChecked" />
</div>
<script>
var app = new Vue({
el: "#app",
data: {
isChecked: false, // isChecked是否選中boolean
},
});
</script>
</body>
</html>
運(yùn)行結(jié)果:

注意: 如果 isChecked 的值是 null、undefined 或 false,則 checked 特性甚至不會(huì)被包含在渲染出來的 <input> 元素中,我們將 data 中的 isChecked 值改為 null
var app = new Vue({ el:'#app', data:{ isChecked:null // isChecked是否選中 } })
2.4 javascript 表達(dá)式
上面,我們只進(jìn)行了綁定簡(jiǎn)單的屬性鍵值。但實(shí)際上,對(duì)于所有的數(shù)據(jù)綁定,Vue.js 都提供了完全的 JavaScript 表達(dá)式支持,感受強(qiáng)大的模板語法力量吧!例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>vue</title>
<!-- 通過cdn方式引入 vue.js -->
<script src="https://cdn.bootcss.com/vue/2.5.10/vue.min.js"></script>
</head>
<body>
<!-- javascript表達(dá)式-->
<div id="app">
<!-- 運(yùn)算符 -->
<p>num + 24 = {{num + 24}}</p>
<!-- 三元表達(dá)式 -->
<p>Are you ok? {{ok ? 'I am ok !':'no'}}</p>
<!-- 對(duì)象方法直接調(diào)用 -->
<p>名字倒過來寫:{{name.split('').reverse().join('')}}</p>
<!-- 屬性值運(yùn)算操作 -->
<p v-bind:class="'col'+colNum">xnm</p>
</div>
<script>
var app = new Vue({
el: "#app",
data: {
num: 20,
ok: true,
name: "小牛馬",
colNum: "12",
},
});
</script>
</body>
</html>
運(yùn)行結(jié)果:

三、指令
指令 (Directives) 是帶有 v- 前綴的特殊特性。
3.1 參數(shù)
一些指令能夠接收一個(gè)“參數(shù)”,在指令名稱之后以冒號(hào)表示。例如,v-bind 指令可以用于響應(yīng)式地更新 HTML 特性,在這里 href 是參數(shù),告知 v-bind 指令將該元素的 href 特性與表達(dá)式 url 的值綁定,例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>vue</title>
<!-- 通過cdn方式引入 vue.js -->
<script src="https://cdn.bootcss.com/vue/2.5.10/vue.min.js"></script>
</head>
<body>
<!-- 指令 參數(shù)-->
<div id="app">
<a v-bind:href="url">小牛馬</a>
</div>
<script>
var app = new Vue({
el: "#app",
data: {
url: "https://www.lanqiao.cn",
},
});
</script>
</body>
</html>
另外一個(gè)例子,v-on 指令,用于監(jiān)聽 DOM 事件,例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>vue</title>
<!-- 通過cdn方式引入 vue.js -->
<script src="https://cdn.bootcss.com/vue/2.5.10/vue.min.js"></script>
</head>
<body>
<!-- 指令 參數(shù)-->
<div id="app">
<p>我叫:{{name}}</p>
<!-- handleClick 使我們?cè)趯?shí)例 methods 中寫的方法 -->
<button v-on:click="handleClick">點(diǎn)我</button>
</div>
<script>
var app = new Vue({
el: "#app",
data: {
name: "小牛馬",
},
methods: {
//實(shí)例方法對(duì)象
handleClick: function () {
this.name = this.name.split("").reverse().join("");
},
},
});
</script>
</body>
</html>
運(yùn)行結(jié)果:

3.2 動(dòng)態(tài)參數(shù)
上面屬性或者事件我們都是寫死的,其實(shí)在 Vue 它也可以是動(dòng)態(tài)的。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>vue</title>
<!-- 通過cdn方式引入 vue.js -->
<script src="https://cdn.bootcss.com/vue/2.5.10/vue.min.js"></script>
</head>
<body>
<!-- 指令 動(dòng)態(tài)參數(shù)-->
<div id="app">
<p>我叫:{{name}}</p>
<button v-on:[event]="handleClick">點(diǎn)我</button>
</div>
<script>
var app = new Vue({
el: "#app",
data: {
name: "實(shí)驗(yàn)樓",
event: "click",
},
methods: {
handleClick: function () {
this.name = this.name.split("").reverse().join("");
},
},
});
</script>
</body>
</html>
event 此時(shí)的值為click,那我們點(diǎn)擊按鈕時(shí)就會(huì)觸發(fā)事件回調(diào),運(yùn)行結(jié)果和上面一樣。
3.3 修飾符
修飾符是以半角句號(hào) . 指明的特殊后綴,用于指出一個(gè)指令應(yīng)該以特殊方式綁定,大致分為三類,后面課程我們會(huì)一一接觸到:
- 事件修飾符
- 按鍵修飾符
- 系統(tǒng)修飾符
例如,事件修飾符中的.prevent修飾符和原生 event.preventDefault() 效果一樣,可以阻止事件默認(rèn)行為,在表單中點(diǎn)擊提交按鈕,就會(huì)發(fā)生頁(yè)面跳轉(zhuǎn),但是使用了 .prevent 就不會(huì)發(fā)生跳轉(zhuǎn),例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>vue</title>
<!-- 通過cdn方式引入 vue.js -->
<script src="https://cdn.bootcss.com/vue/2.5.10/vue.min.js"></script>
</head>
<body>
<!-- 指令 修飾符-->
<div id="app">
<!-- <form action="/" v-on:="submit">-->
<form action="/" v-on:submit.prevent="submit">
<button type="submit">提交</button>
</form>
</div>
<script>
var app = new Vue({
el: "#app",
data: {},
methods: {
submit: function () {
console.log("成功提交!");
},
},
});
</script>
</body>
</html>
沒有加修飾符,發(fā)生默認(rèn)跳轉(zhuǎn),運(yùn)行效果:

使用了 .prevent ,阻止了默認(rèn)跳轉(zhuǎn),運(yùn)行結(jié)果:

四、指令縮寫
v- 是 Vue.js 中特定的標(biāo)志,用來識(shí)別模板中 Vue 特定的特性。當(dāng)你在使用 Vue.js 為現(xiàn)有標(biāo)簽添加動(dòng)態(tài)行為時(shí),v- 前綴很有幫助,但是頻繁使用到,也會(huì)讓人感覺不到代碼的簡(jiǎn)潔之道,就會(huì)感到不是太人性化。同時(shí),在構(gòu)建由 Vue 管理所有模板的單頁(yè)面應(yīng)用程序時(shí),v- 前綴也變得沒那么重要了。因此,Vue 為 v-bind 和 v-on 這兩個(gè)最常用的指令,提供了特定簡(jiǎn)寫:
4.1 v-bind
上面例子中我們使用了 v-bind 綁定屬性
<a v-bind:href="url">小牛馬</a>
我們可以簡(jiǎn)寫為:
<a :href="url">小牛馬</a>
同樣的使用 v-bind 綁定的其他屬性也可以簡(jiǎn)寫:
v-bind:class="className" 簡(jiǎn)寫為 :class="className" v-bind:value="myValue" 簡(jiǎn)寫為 :value
4.2 v-on
上面 v-bind 指令提供簡(jiǎn)寫,同樣 v-on 指令也提供簡(jiǎn)寫,但是與 v-bind 有一些差異,v-on: 使用 @ 簡(jiǎn)寫。
<!-- 完整語法 --> <button v-on:click="handleClick">點(diǎn)我</button> <!-- 縮寫 --> <button @click="handleClick">點(diǎn)我</button>
總結(jié)
本文講解 Vue.js 模板語法,了解雙大括號(hào)表達(dá)式,以及模板插值,模板上簡(jiǎn)單的指令應(yīng)用,指令的縮寫模式等,相信大家對(duì) Vue.js 已經(jīng)有了初步了解。
下文講解Vue的計(jì)算屬性和偵聽屬性與過濾器
到此這篇關(guān)于Vue的模板語法以及案例的文章就介紹到這了,更多相關(guān)Vue模板語法案例內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
webpack4+Vue搭建自己的Vue-cli項(xiàng)目過程分享
這篇文章主要介紹了webpack4+Vue搭建自己的Vue-cli,對(duì)于vue-cli的強(qiáng)大,使用過的人都知道,極大的幫助我們降低了vue的入門門檻,感興趣的朋友跟隨腳本之家小編一起看看吧2018-08-08
vue3組件的v-model:value與v-model的區(qū)別解析
在Vue3中,v-model和v-model:value都是用于實(shí)現(xiàn)雙向數(shù)據(jù)綁定的語法糖,但v-model:value提供了更顯式和靈活的綁定方式,允許你明確指定綁定的屬性名和事件名,它們的主要區(qū)別在于默認(rèn)行為、靈活性、多模型綁定和使用場(chǎng)景,感興趣的朋友一起看看吧2025-02-02
vue項(xiàng)目兼容ie11的實(shí)現(xiàn)方法
本文主要介紹了vue項(xiàng)目兼容ie11的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Vue+Element UI 樹形控件整合下拉功能菜單(tree + dropdown +input)
這篇文章主要介紹了Vue+Element UI 樹形控件整合下拉功能菜單(tree + dropdown +input)的方法,幫助大家更好的理解和學(xué)習(xí)vue,感興趣的朋友可以了解下2020-08-08
Vue3 + MybatisPlus實(shí)現(xiàn)批量刪除功能(詳細(xì)代碼)
這篇文章主要介紹了Vue3 + MybatisPlus實(shí)現(xiàn)批量刪除功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03

