v-ifv-else-if详解

一、v-ifv-else-if的基本用法

<template>
  <div>
    <p v-if="isShow">这是v-if的内容</p>
    <p v-else-if="isShow2">这是v-else-if的内容</p>
    <p v-else>这是v-else的内容</p>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      isShow: true,
      isShow2: false
    }
  }
}
</script>

v-ifv-else-if是Vue中条件渲染的常用指令,它们的作用是根据表达式的值的变化来显示或隐藏DOM元素。

v-ifv-else-if的基本语法是:

<element v-if="condition">...</element>
<element v-else-if="condition2">...</element>
<element v-else>...</element>

其中,如果condition的值为true,则显示v-if控制的元素,否则不显示;同理,如果condition2的值为true,则显示v-else-if控制的元素,否则不显示;如果前面所有的条件都不满足,则显示v-else控制的元素。

二、v-ifv-else-if与v-show的区别

v-ifv-else-if与v-show两者都能控制元素的显示与隐藏,但它们的实现方式不同。

首先,v-show的本质是通过CSS的display属性来控制元素的显示与隐藏。当显示条件为true时,给元素添加display属性为block,否则给元素添加display:none属性。也就是说,即使元素被隐藏,它的DOM结构还是会被保留,只是简单的通过CSS的display:none属性来控制元素的可见性,因此切换复杂度较低,但有可能会影响页面性能。

相比之下,v-ifv-else-if的工作方式是直接切换DOM元素。当条件为true时,Vue创建管理该元素的DOM,否则销毁该元素及其子元素。这就造成了v-ifv-else-if切换的复杂度较高,但能够在切换元素时优化页面性能。

<template>
  <div>
    <p v-show="isShow">这是v-show的内容</p>
    <p v-if="isShow">这是v-if的内容</p>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      isShow: true
    }
  }
}
</script>

在上面的例子中,我们通过v-show和v-if来控制相同的元素,它们的区别是:

  • v-show通过display属性来控制元素的显示与隐藏,元素的DOM结构一直被保留,但是通过CSS的display:none属性控制元素可见性,有可能会影响页面性能。
  • v-if通过切换DOM元素来控制元素的显示与隐藏,元素的DOM结构不一定被保留,能够在切换元素时优化页面性能,但切换的复杂度较高。

三、v-ifv-else-if的使用案例

v-ifv-else-if不仅仅是简单的条件渲染,还可以根据不同情况来显示不同的内容。

1.基础案例

基础案例:使用v-ifv-else-if判断不同的年龄段,并显示不同的内容。

<template>
  <div>
    <div v-if="age < 18">
      <p>您未成年,禁止入内</p>
    </div>
    <div v-else-if="age >= 18 && age < 60">
      <p>您已成年并且未达到退休年龄,可以正常工作</p>
    </div>
    <div v-else>
      <p>您已退休,可以休息一下了</p>
    </div>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      age: 25
    }
  }
}
</script>

2.复杂案例

复杂案例:当鼠标移动到不同的按钮上时,显示不同的提示信息。

<template>
  <div>
    <button @mousemove="setTips('这是按钮1的提示信息')">按钮1</button>
    <button @mousemove="setTips('这是按钮2的提示信息')">按钮2</button>
    <button @mousemove="setTips('这是按钮3的提示信息')">按钮3</button>
    <div v-if="tips">
      {{ tips }}
    </div>
  </div>
</template>
 
<script>
export default {
    data(){
        return {
            tips: ""
        }
    },
    methods: {
        setTips(value){
            this.tips = value;
        }
    }
}
</script>

在上面的例子中,我们用了一个data属性名为tips来控制提示内容的显示,当鼠标移动到不同按钮上时,通过调用setTips方法设置tips的值,由v-if来控制提示内容的显示与隐藏。这种方式在需要动态提示信息的场景中非常常用。

3.高级案例:根据不同的列表状态展示不同的内容

高级案例:根据不同的列表状态展示不同的内容,如果列表为空则显示”No Data”,如果列表正在加载中则显示”Loading…”,如果列表加载完成,但是没有数据时则显示”No Data”。

<template>
  <div>
    <ul v-if="isCompleted">
      <li v-for="item in data" :key="item">{{item}}</li>
    </ul>
    <span v-else-if="isLoading">Loading...</span>
    <span v-else>No Data</span>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      data: [],
      isLoading: true,
      isCompleted: false
    }
  },
  created() {
    setTimeout(() => {
       // 模拟异步请求数据
      if (this.data.length) {
        this.isCompleted = true;
        this.isLoading = false;
      } else {
        this.isLoading = false;
      }
    }, 2000)
  }
}
</script>

在上面的高级案例中,我们用了三个data属性来控制列表展示的状态:

  • data:列表中的数据。
  • isLoading:列表是否正在请求数据的状态标志。
  • isCompleted:列表请求数据完成后的状态标志。

通过v-ifv-else-if来实现列表不同状态下的展示内容,其中当isLoading为true时,显示Loading…,当isCompleted为true时,显示列表内容,否则显示No Data。这种方式在数据加载过程中需要展现不同状态下的展示内容时非常实用。

四、总结

v-ifv-else-if是Vue中常用的条件渲染指令,它提供了控制元素显示与隐藏的功能,同时还能根据不同情况显示不同的内容。v-ifv-else-if的实现方式是直接切换DOM元素,所以能够在切换元素时优化页面性能。但切换的复杂度较高,需要慎重使用。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/311524.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2025-01-05 13:24
下一篇 2025-01-05 13:24

相关推荐

  • Python while嵌套if

    本文将从多个方面对Python while里面嵌套if做详细的阐述,帮助你更好地理解如何在Python中使用while嵌套if语句。 一、while循环和if语句的基本概念 在开始…

    编程 2025-04-27
  • Python循环输出1到100的偶数if语句

    本文将从多个角度阐述Python循环输出1到100的偶数if语句的方法和技巧。 一、循环输出1到100的偶数if语句的代码实现 for i in range(1, 101): if…

    编程 2025-04-27
  • 如何使用Python编写if语句

    Python是一种广泛使用的高级编程语言,由于其语法简洁、易于学习和强大的功能,已经成为了开发人员的首选之一。if语句是Python编程语言中最基本的流程控制语句之一,用于判断给定…

    编程 2025-04-27
  • 分析if prefixoverrides="and |or"的用法与实例

    if语句是编程语言中最为基础和常见的控制流语句,而prefixoverrides是if语句的一个重要属性。其中,prefixoverrides的常见取值为and和or。那么,这两者…

    编程 2025-04-27
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25

发表回复

登录后才能评论