二、Vue.js—綁定語法和指令

綁定語法

給HTML中添加變量,讓HTML中的內(nèi)容也可以隨程序中的變量改變而改變。

{{ ... }} 雙括號(hào)語法,也叫大胡子語法(Mustache)

官方名字:Interpolation(補(bǔ)缺、插值的意思)。

{{ }}雙括號(hào)中可以放變量、js表達(dá)式、函數(shù)調(diào)用、創(chuàng)建對(duì)象、訪問數(shù)組元素、三目等,不能放程序結(jié)構(gòu)(分支和循環(huán)),沒有返回值的函數(shù)調(diào)用。

注:只能綁定元素的內(nèi)容,無法綁定元素的屬性值。

示例:

指令

Vue.js提供的,專門增強(qiáng)HTML功能的特殊的HTML屬性。

1.元素的屬性值可能發(fā)生變化:v-bind

用法:<any? v-bind:屬性名="數(shù)據(jù)變量/js表達(dá)式">......</any>

簡(jiǎn)寫:v-bind可省略,<any? :屬性名="數(shù)據(jù)變量/js表達(dá)式">......</any>

2.根據(jù)程序中的變量值控制一個(gè)元素的顯示與隱藏:v-show

用法:<any? v-show="js條件">......</any>

原理:new Vue() 掃描到 v-show 時(shí),自動(dòng)執(zhí)行js條件,如果條件為true,則該元素原樣顯示;否則如果js條件執(zhí)行結(jié)果為false,則 new Vue() 自動(dòng)為當(dāng)前元素添加display:none,隱藏該元素。?

3.根據(jù)程序中的變量值控制一個(gè)元素的顯示與隱藏:v-if

用法:<any? v-show="js條件">......</any>

原理:new Vue() 掃描到 v-if 時(shí),自動(dòng)執(zhí)行js條件,如果條件為true,則保留該元素,否則如果js條件執(zhí)行結(jié)果為false,則刪除該元素!

v-show? vs? v-if

v-show 采用display:none方式隱藏元素,不改變Dom樹,效率高!

v-if 采用添加刪除元素方式控制元素顯示或隱藏,可能頻繁改變Dom樹,效率低!

4.根據(jù)變量控制兩個(gè)元素二選一顯示或隱藏:v-if? ?v-else

用法:<元素1? v-if="條件">

? ? ? ? ? ?<元素2? v-else>

原理:每次掃描時(shí)判斷條件的值,如果條件為true,就顯示元素1,刪除元素2;如果條件為false,就顯示元素2,刪除元素1

注:(1)兩個(gè)元素之間不能插入其他元素,必須緊挨著寫;

? ? ? ?(2)和 js 程序一樣,v-else后不需要寫任何條件

? ? ? ?(3)不是用display:none隱藏,而是徹底刪除不顯示的元素

5.根據(jù)變量控制多個(gè)元素多選一顯示:v-else-if

用法:<元素1? v-if="條件1">

? ? ? ? ? <元素2? v-else-if="條件2">

? ? ? ? ? ......

? ? ? ? ? ?<元素n? v-else>

原理:每次掃描時(shí)判斷條件的值,哪個(gè)元素條件為true,就顯示哪個(gè)元素,并刪除其他元素;如果之前所有條件都不滿足,就顯示最后一個(gè)元素,刪除之前所有元素。

注:(1)v-if 和 v-else-if 和 v-else 之間不能插入其他元素,必須緊挨著寫;

? ? ? ?(2)和 js 程序一樣,v-else后不需要寫任何條件

? ? ? ?(3)不是用display:none隱藏,而是徹底刪除不顯示的元素

6.反復(fù)生成多個(gè)相同結(jié)構(gòu)的HTML元素:v-for

用法:(1)<要反復(fù)生成的元素? v-for="(value,i) of 數(shù)組/字符串"? :key="i">

? ? ? ? ? ?(2)<要反復(fù)生成的元素? v-for="(value,key) of 對(duì)象"? :key="key">

? ? ? ? ? ?(3)<要反復(fù)生成的元素? v-for="i of 整數(shù)">

原理:new Vue() 會(huì)自動(dòng)遍歷of后的數(shù)組中的每個(gè)元素;每遍歷一個(gè)元素,就創(chuàng)建一個(gè)當(dāng)前HTML元素的副本;of前的兩個(gè)變量:value會(huì)自動(dòng)獲得當(dāng)前正在遍歷的數(shù)組元素值,i會(huì)自動(dòng)獲得當(dāng)前正在遍歷的下標(biāo)位置;如果當(dāng)前元素或子元素中,需要正在遍歷的元素或下標(biāo),可用綁定語法來綁定value和i的值。value和i的使用范圍僅限于當(dāng)前元素及其子元素范圍內(nèi),不能再當(dāng)前元素外使用。

注:(1)v-for 可遍歷一切數(shù)字下標(biāo)的元素:數(shù)組/字符串/對(duì)象等;

? ? ? ?(2)<元素 v-for="i of 整數(shù)">可以重復(fù)生成從1開始到這個(gè)整數(shù)的次數(shù)的HTML元素,of前的i會(huì)依次獲得12345可用于綁定在元素的內(nèi)容中。eg:分頁按鈕。

? ? ? ?(3)a.不加:key="i"?反復(fù)生成的元素是無差別的,如果將來數(shù)組或?qū)ο笾械哪骋粋€(gè)成員值發(fā)生了改變,就無法精準(zhǔn)找到并區(qū)分要更改的是哪一個(gè)元素,只能將這組元素全部重新生成一遍——效率低!

? ? ? ? ? ? ? ? b.加上:key="i" ,等于對(duì)每個(gè)元素加上一個(gè)不重復(fù)的標(biāo)識(shí)i。如果將來數(shù)組或?qū)ο笾心骋粋€(gè)成員值發(fā)生了改變,即可根據(jù)key屬性的值精確找到要更改的一個(gè)HTML元素,只更改受影響的一個(gè)HTML元素即可,不用將這組HTML元素全部重新生成一遍——效率高!

? ? ? ?(4)當(dāng)數(shù)組中保存的是原始類型的值時(shí),在程序中修改數(shù)組中某個(gè)元素值時(shí),不能使用[下標(biāo)]方式訪問,因?yàn)榇藭r(shí)下標(biāo)方式是不受監(jiān)控的,即使修改成功,頁面也不會(huì)自動(dòng)更新。應(yīng)該用.splice(i,1,"新值")代替。但是如果數(shù)組中保存的是引用類型的對(duì)象,則可以用[下標(biāo)]修改。

7.綁定HTML片段內(nèi)容:v-html

用法:<元素? v-html="包含HTML內(nèi)容的變量或js表達(dá)式">

8.防止用戶短暫看到{{}}:v-cloak

因?yàn)関ue代碼是放在js文件中的,所以如果網(wǎng)速慢,vuediamante暫時(shí)沒有下載下來時(shí),用戶很有可能短暫看到頁面上的綁定語法,用戶體驗(yàn)不好。

用法:(1)在包含綁定語法的元素上添加v-cloak屬性;

? ? ? ? ? ?(2)在css中手動(dòng)添加樣式:[v-cloak]{display:none}。

原理:(1)用屬性選擇器查找所有帶有v-cloak屬性的元素,暫時(shí)隱藏;

? ? ? ? ? ?(2)當(dāng)new Vue()渲染完成時(shí),自動(dòng)找到所有v-cloak屬性,自動(dòng)移除。

9.防止用戶短暫看到{{}}:v-text

用法:<元素 v-text="變量或js表達(dá)式">......</元素>

原理:因?yàn)榻壎ㄕZ法寫在了元素的屬性里,所以,如果不是vue幫忙,用戶是無論如何看不到元素屬性中的內(nèi)容的。當(dāng) new Vue() 讀取到 v-text 的內(nèi)容時(shí),會(huì)解析 v-text 的內(nèi)容,替換元素開始標(biāo)簽和結(jié)束標(biāo)簽之間的內(nèi)容。

10.事件綁定:v-on / 簡(jiǎn)寫@? 簡(jiǎn)寫

用法:(1)標(biāo)準(zhǔn)寫法:<元素? v-on:事件名="處理函數(shù)(實(shí)參值...)">

? ? ? ? ? ?(2)簡(jiǎn)寫:<元素? @事件名="處理函數(shù)(實(shí)參值...)">

? ? ? ? ? ?(3)函數(shù)不需要傳參時(shí),()可省略。<元素? @事件名="處理函數(shù)">

11. v-once

僅在首次渲染頁面時(shí)綁定一次,即使之后模型變量再改變,也不會(huì)自動(dòng)更新頁面。

原理:只在首次加載時(shí),一次性將模型數(shù)據(jù)顯示在當(dāng)前元素,不會(huì)將當(dāng)前元素加入到虛擬Dom樹中。

12. v-pre

保留當(dāng)前元素中的{{}}語法,不進(jìn)行綁定渲染。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容