Vue.js使用v-show和v-if的注意事項(xiàng)
關(guān)于兩者的區(qū)別,官網(wǎng)是這樣說的:
在切換 v-if 塊時(shí),Vue.js 有一個(gè)局部編譯/卸載過程,因?yàn)?v-if 之中的模板也可能包括數(shù)據(jù)綁定或子組件。v-if 是真實(shí)的條件渲染,因?yàn)樗鼤?huì)確保條件塊在切換當(dāng)中合適地銷毀與重建條件塊內(nèi)的事件監(jiān)聽器和子組件。
v-if 也是惰性的:如果在初始渲染時(shí)條件為假,則什么也不做——在條件第一次變?yōu)檎鏁r(shí)才開始局部編譯(編譯會(huì)被緩存起來)。
相比之下,v-show 簡單得多——元素始終被編譯并保留,只是簡單地基于 CSS 切換。
一般來說,v-if 有更高的切換消耗而 v-show 有更高的初始渲染消耗。因此,如果需要頻繁切換 v-show 較好,如果在運(yùn)行時(shí)條件不大可能改變 v-if 較好。
下面通過示例來看看在使用v-show與v-if時(shí)的注意事項(xiàng)
1、通過Vue.js中v-if指令來判斷Vue中某個(gè)對(duì)象是否為空(該對(duì)象與后臺(tái)傳來的json數(shù)據(jù)綁定),從而判斷是否顯示分頁條,在實(shí)際過程中發(fā)現(xiàn),第一次請(qǐng)求后臺(tái)數(shù)據(jù),進(jìn)行渲染過程后,分頁條沒有顯示,但之后的請(qǐng)求后臺(tái)數(shù)據(jù)再渲染,分頁條都可正常顯示。
問題如圖所示:

2、原因
查看頁面未渲染dom結(jié)構(gòu),發(fā)現(xiàn)上述分頁條所在的div,沒有出現(xiàn)頁面中,這是由于vue組件初始化時(shí),由于list為空導(dǎo)致id為example的div刪除了,所以后續(xù)分頁操作,針對(duì)是空dom對(duì)象,在第一次渲染結(jié)束后,由于list不為空,該div又加到該節(jié)點(diǎn)上,所以而后的分頁條都可正常顯示。

3、解決
將v-if指令替換為v-show指令,在條件為真的情況下,v-if將其所在dom及其子dom都刪除,而v-show是將該dom加上了“display:none”,使其隱藏了起來。修改代碼及效果如下


使用心得:
對(duì)于V-show,V-if如何選擇,本人有以下建議:
1、對(duì)于管理系統(tǒng)的權(quán)限列表的展示,這里可以使用V-if來渲染,如果使用到V-show,對(duì)于用戶沒有的權(quán)限,在網(wǎng)頁的源碼中,仍然能夠顯示出該權(quán)限,如果用V-if,網(wǎng)頁的源碼中就不會(huì)顯示出該權(quán)限。(在前后臺(tái)分離情況下,后臺(tái)不負(fù)責(zé)渲染頁面的場(chǎng)景。)
2、對(duì)于前臺(tái)頁面的數(shù)據(jù)展示,這里推薦使用V-show,這樣可以減少開發(fā)中不必要的麻煩。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
相關(guān)文章
element表格組件實(shí)現(xiàn)右鍵菜單的功能
本文主要介紹了element表格組件實(shí)現(xiàn)右鍵菜單的功能,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
詳解Vue.js iview實(shí)現(xiàn)樹形權(quán)限表(可擴(kuò)展表)
這篇文章主要介紹了詳解Vue.js iview實(shí)現(xiàn)樹形權(quán)限表(可擴(kuò)展表),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09
Vue Router根據(jù)后臺(tái)數(shù)據(jù)加載不同的組件實(shí)現(xiàn)
本文主要介紹了根據(jù)用戶所購買服務(wù)的不同,有不同的頁面展現(xiàn)。文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Vue Transition實(shí)現(xiàn)類原生組件跳轉(zhuǎn)過渡動(dòng)畫的示例
本篇文章主要介紹了Vue Transition實(shí)現(xiàn)類原生組件跳轉(zhuǎn)過渡動(dòng)畫的示例,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08
在Vue中使用scoped屬性實(shí)現(xiàn)樣式隔離的原因解析
scoped是Vue的一個(gè)特殊屬性,可以應(yīng)用于<style>標(biāo)簽中的樣式,這篇文章給大家介紹在Vue中,使用scoped屬性為什么可以實(shí)現(xiàn)樣式隔離,感興趣的朋友一起看看吧2023-12-12
手把手帶你使用vue+node作后端連接數(shù)據(jù)庫
為了快速學(xué)習(xí)nodejs制作后端并和數(shù)據(jù)庫進(jìn)行交互的方法,所以趕緊寫一篇這樣的文章出來,下面這篇文章主要給大家介紹了關(guān)于手把手帶你使用vue+node作后端連接數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下2023-03-03
vue實(shí)現(xiàn)按鈕文字動(dòng)態(tài)改變
這篇文章主要介紹了vue實(shí)現(xiàn)按鈕文字動(dòng)態(tài)改變方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
基于vue 實(shí)現(xiàn)表單中password輸入的顯示與隱藏功能
這篇文章主要介紹了vue 實(shí)現(xiàn)表單中password輸入的顯示與隱藏功能 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07

