v-if 和 v-show的区别

简单来说,v-if 的初始化较快,但切换代价高;v-show 初始化慢,但切换成本低

1.共同点

都是动态显示DOM元素

2.区别

(1)手段:

v-if是动态的向DOM树内添加或者删除DOM元素;
v-show是通过设置DOM元素的display样式属性控制显隐;

(2)编译过程:

v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;
v-show只是简单的基于css切换;

(3)编译条件:

v-if是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译(编译被缓存?编译被缓存后,然后再切换的时候进行局部卸载);
v-show是在任何条件下(首次条件是否为真)都被编译,然后被缓存,而且DOM元素保留;

(4)性能消耗:

v-if有更高的切换消耗;
v-show有更高的初始渲染消耗;

(5)使用场景:

v-if适合运营条件不大可能改变;
v-show适合频繁切换。

(6)汇总:

v-if适合运营条件不大可能改变;v-show适合频繁切换。

  1. 对于管理系统的权限列表的展示,这里可以使用v-if来渲染,如果使用到v-show,对于用户没有的权限,在网页的源码中,仍然能够显示出该权限,如果用v-if,网页的源码中就不会显示出该权限。(在前后台分离情况下,后台不负责渲染页面的场景。)
  2. 对于前台页面的数据展示,这里推荐使用v-show,这样可以减少开发中不必要的麻烦。
(7)总结:
  • v-if和v-show都是用来控制元素的渲染。v-if判断是否加载,可以减轻服务器的压力,在需要时加载,但有更高的切换开销
  • v-show调整DOM元素的CSS的dispaly属性,可以使客户端操作更加流畅,但有更高的初始渲染开销
  • 如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。
  • v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建
  • 不同的是带有 v-show 的元素始终会被渲染并保留在 DOM 中。v-show 只是简单地切换元素的 CSS 属性 display
(8)注意:
  • v-if可以配合template标签使用,v-show不可以
  • 题外:v-if 和 v-for不能一起使用,因为v-for比v-if有更高的优先级。
(9)补充:
  • 在渲染多个元素的时候,可以把一个 元素作为包装元素,并使用v-if 进行条件判断,最终的渲染不会包含这个元素,v-show是不支持 语法
  • v-if:场景—>权限校验的时候
  • v-show:场景—>展示页面,类似于一些选项卡等
  • v-if可与v-else、v-else-if配合使用进行判断执行,但一定需要相邻
  • 一个简单的应用场景就是列表页与详情页之间切换的时候,通过v-if来决定是否渲染详情页,通过v-show决定是否渲染列表页,这样过可以做到从详情页返回时会到的就是进入详情页前的列表页。
(10)细节:
  • v-if与v-else语句需要联合使用,如中间加了其他语句如P标签使上下不连贯儿将导致报错!!但是v-if仍可以使用
  • v-if与v-else中间可以使用v-else-if
  • 两个即两个以上的div需要同一个元素控制的时候,用template!!!如下将浪费空间多申明了一个div
    在这里插入图片描述
    改版
    在这里插入图片描述
    控制台template改良版将不会出现一个新的div,也不会出现template,减少空间
    在这里插入图片描述
  • [ ]在使用template时,v-show将失去作用。因为v-show是设置显示与隐藏,而template是没有实际东西的dom,所以v-show与template联合使用将失效。
  • 频繁的切换显示与隐藏用v-show ,只判断一次时,用v-if 。

更多内容请参见原文http://www.cnblogs.com/wmhuang/p/5420344.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值