該指令用於條件性的渲染一塊內容,當指令的表達式返回值爲true的時候,內容會被渲染出來;若是條件一直爲false,那麼內容就一直不會被渲染。相反,當返回值爲false的時候,內容會被銷燬。css
v-if能夠和v-else、v-else-if搭配使用,使用方法就跟原生js上的用法基本一致。dom
在if 和 else的切換過程當中,會複用已有的元素,而不是從頭開始渲染。可是能夠經過給元素添加key屬性值,使每次切換都是從新渲染和銷燬。
dome:post
<template> <div> <button @click="fun">click</button> <div v-if="pShow"> <label>UserName</label> <input type="text" placeholder="UserName"> </div> </div> </template> <script> export default{ name: 'postimg', data () { return { pShow: false } }, methods:{ fun (){ this.pShow = !this.pShow; } }, } </script>
隱藏時,元素不存在於文檔中this
該指令和v-if用法基本一致,指令表達式的值爲true就顯示,爲false就隱藏。顯示和隱藏是基於css的樣式切換,相似於visibility屬性。即便一開始條件爲false,內容也會被渲染在文檔中,只是由css樣式控制隱藏而已。code
<template> <div> <button @click="fun">click</button> <div v-show="pShow"> <label>UserName</label> <input type="text" placeholder="UserName"> </div> </div> </template> <script> export default{ name: 'postimg', data () { return { pShow: false } }, methods:{ fun (){ this.pShow = !this.pShow; } }, } </script>
隱藏時,元素存在於文檔中ip
v-if只有當指令的表達式返回值爲true的時候纔會被渲染,爲false的時候,元素是不存在於文檔中的;而v-show則無論指令表達式的返回值是什麼,都會被渲染,而且只是基於css的樣式切換,元素始終存在於文檔中。文檔
1.v-if
在條件切換時,會對標籤進行適當的建立和銷燬,而v-show
則僅在初始化時加載一次,所以v-if
的開銷相對來講會比v-show
大。
2.v-if
是惰性的,只有當條件爲真時纔會真正渲染標籤;若是初始條件不爲真,則v-if
不會去渲染標籤。v-show
則不管初始條件是否成立,都會渲染標籤,它僅僅作的只是簡單的CSS切換。input