一、v-if vs v-show
v-if
是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。
v-if
也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。
相比之下,v-show
就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。
一般来说,v-if
有更高的切换开销,而 v-show
有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show
较好;如果在运行时条件很少改变,则使用 v-if
较好。
二、案例
<body>
<div id="app">
<div v-if="isIf"><p>我被v-if控制</p></div>
<div v-show="isShow"><p>我被v-show控制</p></div>
<button @click="pChange">Change</button>
</div>
</body>
<script>
var vm = new Vue({
el:"#app",
data:{
isIf:true,
isShow:true
},
methods:{
pChange(){
this.isIf=(this.isIf===true?false:true);
this.isShow=(this.isShow===true?false:true);
}
}
})
</script>
用一个button按钮控制v-if和v-show的true、false切换,当两个指令值都为false时,v-if控制的元素是直接从DOM树销毁的;而v-show控制的元素还在DOM树中,只是以display:none样式隐藏元素内容。