v-if VS v-show 2.0

news/2025/1/1 15:10:26/

v-show与v-if的区别

  • 控制手段不同
  • 编译过程不同
  • 编译条件不同

控制手段: v-show 隐藏该元素操作的是css,使得display:none,dom元素还在;但是v-if 隐藏该元素则是直接从dom节点将元素删除。
编译过程: v-if 切换有一个局部编译/卸载的过程,切换过程合适地销毁和重建内部的事件监听和子组件。v-show只是简单的基于css切换。
编译条件: v-if 是真正的条件渲染,它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建,只有渲染条件为假时,并不做操作,直到为真才渲染。
v-show 由false变为true的时候不会触发组件的生命周期
v-if由false变为true的时候,触发组件的beforeCreate、create、beforeMount、mounted钩子,由true变为false的时候触发组件的beforeDestory、destoryed方法
性能消耗:v-if有更高的切换消耗;v-show有更高的初始渲染消耗;

v-if 对元素的复用性再学习

之前文章里已经提到过​ Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。
这时在使用v-if 进行切换时我们发现,在两个内容基本相同的标签进行切换的时候,这里举例element-ui里面的表单元素 <el-form>

<!-- 手机号注册 -->
<view v-show="isPhone"><el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"><el-form-item v-if="isPhone":label="i18n.sjhm" prop="phone"><el-input v-model="ruleForm.phone" :placeholder="i18n.qtxndsjh" class="rule-input"><el-select v-model="phoneArea" slot="prepend" class="num-style"><el-option label="+86 大陆" value="+86"></el-option><el-option label="+852 香港" value="+852"></el-option><el-option label="+853 澳门" value="+853"></el-option></el-select></el-input></el-form-item><el-form-item :label="i18n.yzm" prop="code"><el-input v-model="ruleForm.code" :placeholder="i18n['qsryzm']"></el-input><el-button type="text" v-if="!phone_change" class="get-code" @click="openTestCode">{{i18n.hqyzm}}</el-button><el-button type="text" v-if="phone_change" class="get-code" disabled>{{time}}s{{i18n.hcxhq}}</el-button></el-form-item><el-form-item :label="i18n.password" prop="password"><el-input type="password" v-model="ruleForm.password" :placeholder="i18n.qszndmm" auto-complete="off"></el-input></el-form-item><el-form-item :label="i18n.qrmm" prop="again_password"><el-input type="password" v-model="ruleForm.again_password" :placeholder="i18n.qqrndmm" auto-complete="off"></el-input></el-form-item><el-form-item><el-button @click="resetForm()">{{i18n.return}}</el-button><el-button type="primary" @click="register()">{{i18n.ljzc}}</el-button></el-form-item></el-form>
</view>
<!-- 邮箱注册 -->
<view v-show="!isPhone"><el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm"><el-form-item v-if="!isPhone" :label="i18n.yxyx" prop="email"><el-input v-model="ruleForm.email" :placeholder="i18n.qtxndyx"></el-input></el-form-item><el-form-item :label="i18n.yzm" prop="code"><el-input v-model="ruleForm.code" :placeholder="i18n['qsryzm']"></el-input><el-button type="text" v-if="!phone_change" class="get-code" @click="openTestCode">{{i18n.hqyzm}}</el-button><el-button type="text" v-if="phone_change" class="get-code" disabled>{{time}}s{{i18n.hcxhq}}</el-button></el-form-item><el-form-item :label="i18n.password" prop="password"><el-input type="password" v-model="ruleForm.password" :placeholder="i18n.qszndmm" auto-complete="off"></el-input></el-form-item><el-form-item :label="i18n.qrmm" prop="again_password"><el-input type="password" v-model="ruleForm.again_password" :placeholder="i18n.qqrndmm" auto-complete="off"></el-input></el-form-item><el-form-item><el-button @click="resetForm()">{{i18n.return}}</el-button><el-button type="primary" @click="register()">{{i18n.ljzc}}</el-button></el-form-item></el-form>
</view>

在这里插入图片描述
我们可以看到这里我使用的v-show来进行切换而不是v-if,因为使用v-if 的时候,由于<el-form>里面的<el-form-item>基本上都是输入框的格式,这是使用v-if 进行切换的时候元素会进行复用,此时第一个表单判断输入框报错的红色提示文字以及样式并不会随着上方标签的切换及时更换,除非是我们再点击邮箱注册这边的输入框才会进行失焦判断,然后展示请输入邮箱的提示。
使用v-show则不会出现这个情况,因为v-show 是对于两个大表单的整体的切换,并没有复用元素。

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/655951.html

相关文章

【运算放大器】反相放大电路仿真应用

目录 一、反相放大电路原理&#xff08;简化电路&#xff09; 二、反相放大电路电路原理&#xff08;实际特性&#xff09; 2.1原理图 2.2实际电路 三、虚短 虚断 3.1 虚短 3.2 虚断 四、作业 4.1 &#xff08;反相&#xff09;放大电路设计 4.2 LM741芯片 五、标准…

vp8 的下载

1. vp8 的下载 页面地址 https://github.com/webmproject/libvpx git 下载 git clone https://github.com/webmproject/libvpx.git2. 在 android 上面搭建的 vp8 环境 页面地址 https://github.com/cmeng-git/vpx-android git 下载 git clone https://github.com/cmeng-gi…

对码元的理解

码元是计算波特率的&#xff0c;波特率就是&#xff1a;每秒传送多少个码元&#xff0c;码元/s。 我的理解&#xff1a;码元是进行数据传输过程中解析的基本单元&#xff0c;码元由一组n个bit组成&#xff0c;即码元和bit的关系&#xff1a;码元是由nbit组成的&#xff0c;至于…

VQ-VAE-2

原文链接&#xff1a;Generating Diverse High-Fidelity Images with VQ-VAE-2 加载速度慢点这里&#xff1a;中科院镜像 由于科研需要&#xff0c;最近在学习图像生成相关的文献知识&#xff0c;VQ-VAE-2是我目前了解到的比较新的生成模型&#xff0c;一开始搜索到的其实是Pi…

三极管工作状态判断

要三极管工作在放大状态&#xff0c;就给它加适合大的基极电流Ib&#xff0c;以至于0<Ib<Ic/β&#xff0c;并且计算出来的Vce>1v&#xff0c;以保证三极管工作在线性放大区。 要三极管工作在饱和状态&#xff0c;就给它加足够大的基极电流Ib&#xff0c;以至于Ib>…

示波器听课笔记-1

示波器听课笔记 视频链接-https://www.bilibili.com/video/BV15J41137qP?p1 --立创EDA 课程内容分为以下六个小节&#xff1a; 1、 示波器波形怎么看 2、 Cursor光标测量键的使用 3、 触发电平旋钮让一个抖动的波形稳定 4、 如何使用示波器的触发功能 5、 用示波器探头上的调节…

基于Java人力资源管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

使用Python实现.mat文件转换、读取

目录 一、前言 二、将excel文件转换为mat文件 三、读取mat文件并进行可视化 四、将mat文件转换为excel文件 一、前言 有时候我们拿到一个数据文件不是excel或者csv的怎么办呢&#xff1f;比如&#xff1a;你可恶的合作伙伴测实验数据时&#xff0c;用MATLAB丢给你一个mat…