相同点:
在 vue 中 v-show 与 v-if 的作用效果是相同的,根据表达式的真假来控制元素是否在页面中显示
当表达式都为 false 时,不显示
当表达式结果为 true 时,显示
不同点:
v-show 与 v-if 的作用效果虽然相同,但是操作原理不同
v-show是操作该元素css样式中的display:none来实现元素是否隐藏,没有操作dom元素
v-if是操作dom元素,添加或删除这个dom元素来实现存在或不存在效果
![](https://i-blog.csdnimg.cn/blog_migrate/d17ee275ce483941a649f27bbbd0cd2b.png)
data(){
return{
//不使用return包裹的数据会在项目的全局可见,会造成变量污染。
//使用return包裹后数据中变量只在当前组件中生效,不会影响其他组件。
isShow:true //表达式的值为true
}
},
// 点击事件方法
Play(){
// 如果表达式为true
if(this.isShow == true){
// 表达式结果取反
this.isShow = false;
}else{
// 表达式为false时 取反为true
this.isShow = true;
}
},
// Play(){
// // 表达式取反
// this.isShow = !this.isShow
// }
![](https://i-blog.csdnimg.cn/blog_migrate/65be92375500704b066d749ec36a369e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/66e17fcb3f2011c17fc92c3f6a173050.png)
这次图片的交给v-if来做,会是什么样呢
![](https://i-blog.csdnimg.cn/blog_migrate/3515dd38bdf021de1dfe32a7cac97a10.png)
![](https://i-blog.csdnimg.cn/blog_migrate/414c14b1f634493f5f0a8d9fa3e98036.png)
![](https://i-blog.csdnimg.cn/blog_migrate/61211871629b6a9aaac44ec7654f1da1.png)
v-if和v-show 在实际业务中也可以使用三元表达式来进行
<img src="../assets/bofang.jpg" v-if="isShow== true ? true : false" @click="Play">
实际中如何选择v-if和v-show?
频繁切换显示元素推荐使用v-show,只是样式的更改不会影响性能,若是不频繁可以用v-if,频繁操作dom树会浪费性能