​浅析v-show与v-if​

 

1、相同点

v-show和v-if的页面实现效果是相同的(除v-else 仅与 v-if仅与v-else 仅与 v-if共用),都可以控制普通/dom元素、组件等在页面上的显示与隐藏。用法上也是相同的

<Model v-show="show" /> 
<Model v-if="show" />

 

2、差异化


(1)、控制手段不同 。

(2)、编译过程不同 。

(3)、编译条件不同 。

控制手段:v-show隐藏则是为该元素控制添加css--display:none,dom元素依旧还在。v-if显示隐藏是将dom元素整个节点添加或删除

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

v-show 由false变为true的时候不会触发组件的生命周期

v-if:  由false变为true的时候,触发组件的beforeCreate、create、beforeMount、mounted钩子,

         由true变为false的时候,触发组件的beforeDestory、destoryed方法

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

3、使用场景

v-if 与 v-show 都能控制dom元素在页面的显示

v-if 相比 v-show 开销更大的(直接操作dom节点增加与删除)

如果需要非常频繁地切换,则使用 v-show 较好;若在运行时条件很少改变,则使用 v-if 较好。

4、附属到组件和普通元素时的情况

(1)、v-show
当v-show指令附属于普通元素时,v-show指令状态变化不会影响父组件的生命周期。
当v-show指令附属于组件时,v-show指令状态变化时,父组件和本身组件的生命周期都不会被影响。
(2)、v-if
当v-if指令附属于普通元素时,v-if指令状态变化会使得父组件的dom发生变化,父组件将会更新视图,所以会触发父组件的beforeUpdate和updated钩子函数。
当v-if指令令附属于组件时,v-if指令状态变化对父组件的影响和上一条一致,但是对于本身组件的生命周期的影响是不一样的。

*1、v-if从false切换到true时,会触发beforeCreate,created,beforeMount,mounted钩子。
*2、v-if从true切换到false时,会触发beforeDestroy和destroyed钩子函数。


版权声明:本文为CSDN博主「Mr.Aholic」的原创文章,原文链接:https://blog.csdn.net/weixin_43304253/article/details/128589665

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在Vue.js中,v-bind和v-model都是用于数据绑定的指令,但它们有不同的使用场景和功能。 v-bind指令用于实现单向数据绑定,它可以将Vue实例的数据绑定到HTML元素的属性上。例如,可以使用v-bind来将Vue实例的数据绑定到一个输入框的value属性上,实现数据的动态展示。 v-model指令用于实现双向数据绑定,即数据的同步更新。它可以将Vue实例的数据绑定到表单元素(如输入框、复选框、单选框)的value属性上,并且当用户在表单元素中输入内容时,该数据也会同步更新。 需要注意的是,v-model只能应用在表单控件元素上,而且必须要有value属性。当然,也可以使用v-model绑定自定义组件上的数据,但这需要组件内部实现相应的逻辑。 综上所述,v-bind用于实现单向数据绑定,而v-model用于实现双向数据绑定。根据具体的需求和场景,可以选择合适的指令来进行数据的绑定。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [浅析Vue.js中v-bind v-model的使用和区别](https://download.csdn.net/download/weixin_38661939/12949013)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vue单向以及双向数据绑定(v-bind和v-model的使用)](https://blog.csdn.net/weixin_46713508/article/details/126862720)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值