v show和v if的區別

2021-10-05 18:58:08 字數 1719 閱讀 2968

先大概了解一下這兩個屬性

v-show:通過設定布林值來控制元素是否顯示,如果是true,則顯示,false,則隱藏;如果不是乙個布林值,那麼會預設轉布林;通過設定元素的display屬性來控制是否顯示;

v-if:控制元素的顯示隱藏;如果不是布林,會預設轉成布林;如果是false,直接刪除了原有的元素;

v-if 是「真正」的條件渲染,因為它會確保在切換過程中條件塊內的事件***和子元件適當地被銷毀和重建。

v-if 也是惰性的:如果在初始渲染時條件為假,則什麼也不做——直到條件第一次變為真時,才會開始渲染條件塊。

相比之下,v-show 就簡單得多——不管初始條件是什麼,元素總是會被渲染,並且只是簡單地基於 css 進行切換。

一般來說,v-if 有更高的切換開銷,而 v-show 有更高的初始渲染開銷。因此,如果需要非常頻繁地切換,則使用 v-show 較好;如果在執行時條件很少改變,則使用 v-if 較好。

相同點:v-show和v-if都能控制元素的顯示和隱藏。

不同點

實現本質方法不同

v-show本質就是通過設定css中的display設定為none,控制隱藏

v-if是動態的向dom樹內新增或者刪除dom元素

編譯的區別

v-show其實就是在控制css

v-if切換有乙個區域性編譯/解除安裝的過程,切換過程中合適地銷毀和重建內部的事件監聽和子元件

編譯的條件

v-show都會編譯,初始值為false,只是將display設為none,但它也編譯了

v-if初始值為false,就不會編譯了

v-show只編譯一次,後面其實就是控制css,而v-if不停的銷毀和建立,故v-show效能更好一點。

注意點:因為v-show實際是操作display:" "或者none,當css本身有display:none時,v-show無法讓顯示

總結:如果要頻繁切換某節點時,使用v-show(無論true或者false初始都會進行渲染,此後通過css來控制顯示隱藏,因此切換開銷比較小,初始開銷較大),如果不需要頻繁切換某節點時,使用v-if(因為懶載入,初始為false時,不會渲染,但是因為它是通過新增和刪除dom元素來控制顯示和隱藏的,因此初始渲染開銷較小,切換開銷比較大)

>

"fn"

>

}<

/button>

"flag" style=

"width:100px;height:100px;background: red;"

>

<

/div>

<

/div>

"vue.js"

>

<

/script>

// 在使用指令時,會先找資料型別中的值,如果資料型別中沒有,那麼就去找data或methods中的屬性名;

newvue(,

methods:}}

);// 在vue中報錯警告,不會影響下面的**繼續執行;

console.

log(

100)

;<

/script>

<

/body>

v if 和 v show的區別

簡單來說,v if 的初始化較快,但切換代價高 v show 初始化慢,但切換成本低 都是動態顯示dom元素 1 手段 v if是動態的向dom樹內新增或者刪除dom元素 v show是通過設定dom元素的display樣式屬性控制顯隱 2 編譯過程 v if切換有乙個區域性編譯 解除安裝的過程,切...

v if 和 v show 的區別

v if 和 v show 在頁面都展示為顯示隱藏 如 v if 為true的時候,div顯示,當為false的時候,div消失,也消失,相當於刪除了div,當為true的時候在重新渲染出來這個div 他是惰性的,只有為真的時候才會被渲染,否則什麼也不做 而且還有v if 和v else div v...

v if 和 v show的區別

v if是動態的向dom樹內新增或者刪除dom元素 v show是通過設定dom元素的display樣式屬性控制顯隱 2 編譯過程 v if切換有乙個區域性編譯 解除安裝的過程,切換過程中合適地銷毀和重建內部的事件監聽和子元件 v show只是簡單的基於css切換 3 編譯條件 v if是惰性的,如...