Vue.js學(xué)習(xí)筆記之常用模板語法詳解
本文介紹了Vue.js 常用模板語法,分享給大家,具體如下:
一、文本渲染
Vue支持動態(tài)渲染文本,即在修改屬性的同時,實(shí)時渲染文本內(nèi)容。同時為了提高渲染效率,也支持只渲染一次,即第一次渲染出文本后,文本內(nèi)容不再跟隨屬性值的變化而變化。
實(shí)時渲染
<div class="row">
<h2>文本 - 實(shí)時渲染</h2>
<input type="text" v-model="msg" class="col-md-2" />
<span class="col-md-">{{ msg }}</span>
</div>

v-model 指令將 input 標(biāo)簽的值動態(tài)綁定到屬性 msg 上,通過 {{ msg }} 表達(dá)式顯示在頁面上。當(dāng)修改文本框內(nèi)容時,后面的頁面內(nèi)容將實(shí)時變化并與文本框內(nèi)容保持一致。
一次渲染
<div class="row">
<h2>文本 - 一次渲染</h2>
<input type="text" v-model="msg_once" class="col-md-2" />
<span class="col-md-" v-once>{{ msg_once }}</span>
</div>
在 vm 對象里添加屬性
require(["jquery", "bootstrap", "vue"], function ($, bootstrap, Vue) {
var vm = new Vue({
el: "#app",
data: {
msg_once: "once..."
}
});
});

頁面第一次加載完成時,頁面顯示once...,當(dāng) span 標(biāo)簽加上 v-once 指令后,無論如何修改文本框內(nèi)容,頁面內(nèi)容都不會變化。
HTML代碼渲染
某些情況下,頁面需要動態(tài)的插入一段HTML代碼
在 vm 對象里添加屬性,屬性值為一段HTML代碼
require(["jquery", "bootstrap", "vue"], function ($, bootstrap, Vue) {
var vm = new Vue({
el: "#app",
data: {
html: "<span>This is a html tag.</span>"
}
});
});
頁面元素添加 v-html 指令后,元素對應(yīng)位置將顯示出屬性值內(nèi)的對應(yīng)元素
<div class="row"> <h2>文本 - HTML</h2> <div v-html="html"></div> </div>

二、表達(dá)式
上文中已經(jīng)介紹過的 {{ msg }} 就是一個簡單的表達(dá)式。除此之外,還有一些常用的表達(dá)式寫法。
運(yùn)算表達(dá)式
在上述簡單表達(dá)式中可以使用運(yùn)算符,Vue會將運(yùn)算后的結(jié)果渲染在頁面上
<div>
<h4>運(yùn)算表達(dá)式</h4>
<span v-pre>{{ Number(number)+ }}:</span>
<input v-model="number" type="text" />
<span>運(yùn)算結(jié)果:{{ Number(number)+ }}</span>
</div>

在文本框中輸入數(shù)字,Vue通過表達(dá)式內(nèi)的運(yùn)算符實(shí)時計(jì)算出結(jié)果,并顯示出來。因?yàn)槲谋究騼?nèi)容為字符串,所以在表達(dá)式中需要對 number 屬性進(jìn)行類型轉(zhuǎn)換成數(shù)字。
三元運(yùn)算表達(dá)式
Vue支持在表達(dá)式內(nèi)使用三元運(yùn)算符
<div>
<h4>三元運(yùn)算表達(dá)式</h4>
<span v-pre>{{ ok ? 'YES' : 'NO' }}:</span><span>{{ ok ? 'YES' : 'NO' }}</span>
</div>

Javascript方法
表達(dá)式內(nèi)也可以使用Javascript支持的基礎(chǔ)方法,Vue會動態(tài)執(zhí)行方法并顯示最終結(jié)果
<div>
<h4>Javascript方法</h4>
<span v-pre>{{msg_once.split('').reverse().join('')}}:</span><span>{{msg_once.split('').reverse().join('')}}</span>
</div>

這個例子是將 msg_once 屬性值的字符進(jìn)行倒序排列后重新組合起來。
三、過濾器
過濾器經(jīng)常用來進(jìn)行內(nèi)容的格式化顯示。Vue支持自定義過濾器
首先要在 vm 對象里增加過濾器方法
require(["jquery", "bootstrap", "vue"], function ($, bootstrap, Vue) {
var vm = new Vue({
el: "#app",
data: {
filter_msg: 'base'
},
filters: {
filter: function (value) {
if (!value) {
return '';
}
return value + '_filter1';
},
filter2: function (value) {
if (!value) {
return '';
}
return value + '_filter2';
},
filter_arg: function (value, arg1, arg2) {
if (!value) {
return '';
}
return value + ' ' + arg1 + ' ' + arg2;
}
}
});
});
所有的過濾器方法都要定義在 filters 屬性里,方法的第一個參數(shù)值就是傳遞進(jìn)來需要被處理的原始內(nèi)容,方法的返回值即時處理過的新內(nèi)容。
自定義的過濾器使用方法如下
<div>
<h4>單一過濾器</h4>
<span v-pre>{{ filter_msg | filter1 }}:</span><span>{{ filter_msg | filter1 }}</span>
</div>

上面的例子中,過濾器通過管道符號“|”與需要處理的內(nèi)容進(jìn)行連接,將 filter_msg 屬性值經(jīng)過 filter1 過濾器,在后面追加內(nèi)容并顯示。
同時,Vue也支持連接多個過濾器
<div>
<h4>串聯(lián)過濾器</h4>
<span v-pre>{{ filter_msg | filter1 | filter2 }}:</span><span>{{ filter_msg | filter1 | filter2 }}</span>
</div>

這個例子中,通過管道符號“|”,可以連接多個過濾器,每前一個過濾器的輸出將作為后一個過濾器的輸入,直到顯示最終結(jié)果。
當(dāng)過濾器有多個參數(shù)時,Vue也支持帶參數(shù)調(diào)用
<div>
<h4>過濾器參數(shù)</h4>
<span v-pre>{{ filter_msg | filter_arg('arg1', 'arg2') }}:</span><span>{{ filter_msg | filter_arg('arg1', 'arg2') }}</span>
</div>

四、常用指令
指令就是將一些特殊行為應(yīng)用到頁面DOM元素的特殊屬性。Vue的內(nèi)置指令都是一些帶有 v- 前綴的特殊屬性。
常用的指令如下:
- v-bind
- v-on
- v-for
- v-if
- v-else-if
- v-else
- v-show
v-bind
該指令用來給元素綁定一個或多個特性
<div> <h>v-bind(屬性綁定)</h> <span v-pre>可用的按鈕(v-bind:disabled="!btn_enabled"):</span><button v-bind:disabled="!btn_enabled" type="button">可以點(diǎn)擊的按鈕</button><br/> <span v-pre>不可用的按鈕(v-bind:disabled="btn_enabled"):</span><button v-bind:disabled="btn_enabled" type="button">不可點(diǎn)擊的按鈕</button><br/> <span v-pre>縮寫(:disabled="!btn_enabled"):</span><button :disabled="!btn_enabled" type="button">可以點(diǎn)擊的按鈕</button> </div>
require(["jquery", "bootstrap", "vue"], function ($, bootstrap, Vue) {
var vm = new Vue({
el: "#app",
data: {
btn_enabled: true
}
});
});
在上面的例子里,給 vm 對象增加一個名稱為 btn_enabled 的布爾屬性,在按鈕中通過 v-bind:disabled="btn_enabled" 動態(tài)給 disabled 屬性賦值


頁面上可以看到“不能點(diǎn)擊的按鈕”動態(tài)增加了一個 disabled 屬性。同時 v-bind:disabled="!btn_enabled" 也可以簡寫成 :disabled="!btn_enabled" 。
v-on
該指令綁定事件監(jiān)聽器。事件類型由參數(shù)指定。表達(dá)式可以是一個方法的名字或一個內(nèi)聯(lián)語句。用在普通元素上時,只能監(jiān)聽原生 DOM 事件。在監(jiān)聽原生 DOM 事件時,方法以事件為唯一的參數(shù)。如果使用內(nèi)聯(lián)語句,語句可以訪問一個 $event 屬性。
在 vm 對象的 methods 屬性里添加自定義方法
require(["jquery", "bootstrap", "vue"], function ($, bootstrap, Vue) {
var vm = new Vue({
el: "#app",
methods: {
btn_click: function () {
console.log("button click!");
},
btn_clickWithEvent: function($event){
console.log($event);
},
btn_clickWithMsg: function (msg) {
console.log("Message is:" + msg);
}
}
});
});
通過屬性 v-on:click="btn_click" 在按鈕上添加 click 事件
<div>
<h4>v-on(事件綁定)</h4>
<span v-pre>點(diǎn)擊事件(v-on:click="btn_click"):</span><button v-on:click="btn_click" type="button">點(diǎn)我!</button><br/>
<span v-pre>帶事件參數(shù)的點(diǎn)擊事件(v-on:click="btn_clickWithEvent($event)"):</span><button v-on:click="btn_clickWithEvent($event)" type="button">點(diǎn)我!</button><br/>
<span v-pre>帶自定義參數(shù)的點(diǎn)擊事件(v-on:click="btn_clickWithMsg('Hello world!')"):</span><button v-on:click="btn_clickWithMsg('Hello world!')" type="button">點(diǎn)我!</button><br/>
<span v-pre>縮寫(@click="btn_click"):</span><button @click="btn_click" type="button">點(diǎn)我!</button>
</div>
頁面效果如下


v-on指令也支持縮寫,用@符號代替,比如: @click="btn_click" 。
v-for
該指令用來基于源數(shù)據(jù)多次渲染元素或模板塊。
在 vm 對象里添加一個數(shù)組類型的屬性 books
require(["jquery", "bootstrap", "vue"], function ($, bootstrap, Vue) {
var vm = new Vue({
el: "#app",
data: {
books: ["深入淺出node", "C#本質(zhì)論", "編程珠璣"]
}
});
});
通過 v-for 指令實(shí)現(xiàn)一個簡單列表
<div>
<h4>v-for(循環(huán))</h4>
<ul>
<li v-for="item in books">
{{ item }}
</li>
</ul>
</div>
頁面效果如下

v-for 屬性值是一個 item in expression 結(jié)構(gòu)的表達(dá)式,其中 item 代表 expression 運(yùn)算結(jié)果的每一項(xiàng)。最終的HTML代碼如下

v-if、v-else-if、v-else
條件渲染指令,通過表達(dá)式結(jié)果的真假來插入和刪除元素。 v-if 可以單獨(dú)使用,而 v-else-if 、 v-else 必須和 v-if 一起使用。
下面是一個簡單用法的例子
<div> <h4>v-if、v-else-if、v-else(分支)</h4> <span>分支示例:</span> <input type="text" v-model="number" /> <span v-if="number>10">大于10</span> <span v-else-if="number==10">等于10</span> <span v-else>小于10</span><br/> </div>
頁面顯示如下

當(dāng)文本框里輸入小于10的數(shù)字時,右側(cè)只顯示“小于10”的文本內(nèi)容。

查看源碼發(fā)現(xiàn),只有“小于10”的內(nèi)容的 span 標(biāo)簽存在,另外兩個標(biāo)簽被插入到頁面中。
同樣,在輸入大于10的數(shù)字時,右側(cè)只顯示“大于10”的文本內(nèi)容。而源碼里只有對應(yīng)的 span 標(biāo)簽存在。


v-show
該指令也是條件渲染指令,但是與上述的 v-if 有不同。這可以通過一個例子來說明。
<div> <h4>v-show(條件渲染)</h4> <span>v-show示例:</span> <input type="text" v-model="number" /> <span v-show="number>10">大于10</span> <span v-show="number==10">等于10</span> <span v-show="number<10">小于10</span><br/> </div>
將上面例子里的指令都換成 v-show ,頁面顯示如下

從頁面顯示的結(jié)果上看,沒有任何區(qū)別。但是查看源碼會發(fā)現(xiàn),符合表達(dá)式結(jié)果判斷的元素內(nèi)容將被顯示,不符合結(jié)果判斷的元素將被隱藏,即被加上 display: none; 的樣式。

從上面兩個例子對比可以看出
- v-if:動態(tài)插入或刪除元素
- v-show:動態(tài)顯示或隱藏元素
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue使用vue-area-linkage實(shí)現(xiàn)地址三級聯(lián)動效果的示例
很多時候我們需要使用地址三級聯(lián)動,即省市區(qū)三級聯(lián)動,這篇文章主要介紹了Vue使用vue-area-linkage實(shí)現(xiàn)地址三級聯(lián)動效果的示例,感興趣的小伙伴們可以參考一下2018-06-06
electron實(shí)現(xiàn)靜默打印的示例代碼
這篇文章主要介紹了electron實(shí)現(xiàn)靜默打印的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
vue實(shí)現(xiàn)滑動切換效果(僅在手機(jī)模式下可用)
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)滑動切換效果,僅在手機(jī)模式下可用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07
vue3 拖拽hooks(可兼容移動端)和自定義指令拖拽的實(shí)現(xiàn)代碼
這篇文章主要介紹了vue3 拖拽hooks(可兼容移動端)和自定義指令拖拽的實(shí)現(xiàn)代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考借鑒價值,需要的朋友參考下吧2024-01-01
vue-router如何實(shí)現(xiàn)history模式配置
這篇文章主要介紹了vue-router如何實(shí)現(xiàn)history模式配置,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06
vue自定義加載指令v-loading占位圖指令v-showimg
這篇文章主要為大家介紹了vue自定義加載指令和v-loading占位圖指令v-showimg的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08

