该指令用于条件性的渲染一块内容,当指令的表达式返回值为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