v-if与v-show的区别

news/2025/2/19 17:50:34/

v-if指令可以控制一个元素的显示和隐藏,那么它是如何实现的?它和看起来很像的v-show指令有什么区别呢?
如果v-if指令的值为假,那么这个元素不会被插入DOM。

下面的代码

<div v-if="true">one</div><div v-if="false">Two</div>

会输出如下内容:

<div>one</div>

和v-show指令比较一下,该指令使用CSS样式控制元素的显示/隐藏。
下面的Vue模板

<div v-show="true">one</div><div v-show="false">Two</div>

会输出如下内容:

  <div>one</div>  <div style="display: none;">Two</div>

用户会看到同样的内容,但两者间确实存在其他的影响和差异。
首先,因为使用v-if隐藏的内部元素不会被显示,Vue不会尝试生成对应的HTML代码;而对于v-show指令,事实并非如此。这意味着隐藏尚未加载的内容时,v-if指令更好一些。
下面这个例子会抛出一个异常:

图片

会抛出异常是因为Vue尝试执行user.name——一个尚不存在的对象的属性。在该示例中如果使用v-if就会正常工作,因为Vue直到v-if语句为真时才会去尝试生成元素的内部内容。
此外,有两个条件语句和v-if有关:v-else-if和v-else。它们的行为非常符合预期:

图片

当state值为loading时会显示第一个div, state值为error时会显示第二个,state为其他任意值时会显示第三个div。同一时间只有一个元素会显示。

那么,了解了这么多,为什么会有人想要使用v-show呢?
使用v-if会有性能开销。每次插入或者移除元素时都必须要生成元素内部的DOM树,这在某些时候是非常大的工作量。而v-show除了在初始创建开销时之外没有额外的开销。如果希望频繁地切换某些内容,那么v-show会是最好的选择。

此外,如果元素包含任何图片,那么仅使用CSS隐藏父节点可以使浏览器在图片显示之前就加载它,这意味着一旦v-show变为真值,图片就可以显示出来。如果是v-if指令,图片会直到要显示时才开始加载。

阅读全文下载完整组件代码请关注微信公众号: 前端组件开发


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

相关文章

目标检测入门体验,技术选型,加载数据集、构建机器学习模型、训练并评估

Hi, I’m Shendi 1、目标检测入门体验&#xff0c;技术选型&#xff0c;加载数据集、构建机器学习模型、训练并评估 在最近有了个物体识别的需求&#xff0c;于是开始学习 在一番比较与询问后&#xff0c;最终选择 TensorFlow。 对于编程语言&#xff0c;我比较偏向Java或nod…

两种经典的现货白银假突破类型

假突破是现货白银市场中一种具有反大众性的市场行为。它通常和一种强势的市场行为突破联系在一起&#xff0c;但是它的方向是和突破完全相反的&#xff0c;识别假突破的类型&#xff0c;有助于降低我们亏损的风险&#xff0c;那如何识别呢&#xff1f;下面我们来介绍两种假突破…

陶建辉在 CIAS 2023 谈“新能源汽车的数字化”

近年&#xff0c;中国的新能源汽车发展迅猛&#xff0c;在全球竞争中表现出色&#xff0c;已经连续 8 年保持全球销量第一。在新兴技术的推动下&#xff0c;新能源汽车的数字化转型也正在加速进行&#xff0c;从汽车制造到能源利用、人机交互&#xff0c;各个环节都在进行数字化…

Java 中的内部类的定义

目录 一、成员内部类 二、静态内部类 三、局部内部类 四、匿名内部类 一、成员内部类 public class InnerClass {String name;private Integer age;static String hobby;/*** 成员内部类* 1、成员内部类中只能定义非静态属性和方法* 2、成员内部类中可以访问外部类的成员&a…

CentOS 7 Tomcat服务的安装

前提 安装ava https://blog.csdn.net/qq_36940806/article/details/134945175?spm1001.2014.3001.5501 1. 下载 wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.84/bin/apache-tomcat-9.0.84.tar.gzps: 可选择自己需要的版本下载安装https://mirr…

【密码学引论】密码协议

定义&#xff1a;两个或者两个以上参与者为了完成某一特定任务而采取的一系列执行步骤密码协议&#xff1a;Kerberos、IPSec、SSL、SET算法是低层次上的概念&#xff0c;而协议是高层次上的概念&#xff0c;协议建立在算法的基础上。所有密码协议都容易受中间人攻击&#xff0c…

MySQL数据库 索引

目录 索引概述 索引结构 二叉树 B-Tree BTree Hash 索引分类 索引语法 慢查询日志 索引概述 索引 (index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种…

Andorid 使用bp或者mk编译C文件生成so

在Aosp源码里编译C文件生成so 使用mk编译 文件夹列表 CMkDemo/Android.mk CMkDemo/cpp/SerialPort.c CMkDemo/cpp/SerialPort.hAndroid.mk 内容如下 LOCAL_PATH: $(call my-dir) include $(CLEAR_VARS)LOCAL_MODULE_TAGS : optional# All of the source files that we will…