Vue(Vue2+Vue3)——14.条件渲染

简介: Vue(Vue2+Vue3)——14.条件渲染

14 条件渲染


顾名思义,就是符合哪些条件,就渲染哪些东西,其实就是几个指令的使用

先做一个小例子

我想让这个div时而显示,时而隐藏,可以在两者之间进行切换,那么使用原生的方式实现,想到的是用display控制。在vue中不用亲自的写这个属性,它提供了一个执行:v-show


14.1 v-show


v-show是vue给我们提供的指令,控制元素是否展示,值通常为布尔值(也可以写表达式),为false的时候隐藏,为true的时候显示,默认为true

v-show不仅仅可以写布尔值,也可以写表达式,根据表达式的结果判断是true还是false

上面两个都是false,所以也一定不会显示


v-show的底层实现其实是调整的是display的属性

说到v-show就不得不说下v-if了


14.2 v-if


我们把v-show换成v-if,发现元素也没了,而且没得很彻底,不止是被隐藏了,根本就找不到了

如果确定了这个元素不想显示,那么可以使用v-if

元素直接没了


当然v-if也可以支持表达式


14.3 v-show和v-if整合小案例


如果v-show和v-if都已经掌握了,就可以做一个交互的小案例了

这个案例内容为:定义一个初始化为0的属性n,通过按钮每次自增1,n=1的时候展示一个div,n=2的时候再展示一个div


v-show实现


首先使用v-show实现

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>初始vue</title>
    <!-- 引入vue.js -->
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
    <!-- 使用v-show做条件渲染 -->
    <!-- <div id="root" v-show='true'> 你好,{{name}}</div>    
    <div id="root" v-show='1==2'> 你好,{{name}}</div>     -->
     <!-- 使用if做条件渲染 --> 
     <!-- <div id="root" v-if='1==1'> 你好,{{name}}</div> -->
    <!-- v-if和v-show交互使用小案例 -->
    <div id="root">
        <h2>当前的n的值是{{n}}</h2>
        <button @click="n++">点我n+1</button>
        <div v-show="n === 1">vue</div>
        <div v-show="n === 2">html</div>
        <div v-show="n === 3">java</div>
    </div>
</body>
<script type="text/javascript">
   const vm=  new Vue({
        el:'#root',
        data:{
            name:'vue',
            n:0
        }
    })
</script>
</html>

效果是完全符合的


v-if实现


然后使用v-if实现

也是可以实现的

那么既然v-show和v-if都可以是实现,那么用哪个呢?

如果元素有着很高的切换频率,那么建议使用v-show,因为v-show只是控制display的属性,元素节点还在,但是如果v-if切换频率很高,元素节点一直在消失,不断在dom里面添加删除一个节点,存在一定的效率问题,所以切换频率低的建议使用v-if,频率高的建议使用v-show



14.4 v-else-if


不仅有v-if,还有v-else-if,写法和js的写法逻辑是一样的,如果第一个表达式成立,就不会判断后面的表达式了,它的效率比v-if高,如果有多个判断,建议使用它



14.5 v-else


既然都有v-if和v-else-if,怎么少的了v-else呢,当没有表达式满足的时候,会执行它,一般v-else里面不会写表达式,因为写也不会去执行判断

值得注意的是:当我们配合使用这些判断的时候,不允许被打断,如果中间有其他元素,则会打断整体结构的运行


14.6 小技巧


如果我们使用v-show或者v-if判断的时候,有多个相同的条件,那么我们需要写多次相同的判断

这样虽然可以实现功能,但是代码有些冗余


技巧1(不推荐)


这种情况下,我们可以给这些元素一个父元素,条件在父容器里面写

这样写虽然可以实现,但是有个小小的美中不足,就是破坏了结构,本来只有三个H2元素,现在为了实现功能却要加一个div


技巧2(推荐)


我们不用div,使用template(模板),它最大的特点就是不影响结构,值得注意的是:template只能配合v-if使用,不能配合v-show使用

上面说了,只能配合v-if使用,换成v-show是不行了,我们也来验证下

n还不等于1就显示出来了,明显不行

相关代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>初始vue</title>
    <!-- 引入vue.js -->
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
    <!-- 使用v-show做条件渲染 -->
    <!-- <div id="root" v-show='true'> 你好,{{name}}</div>    
    <div id="root" v-show='1==2'> 你好,{{name}}</div>     -->
     <!-- 使用if做条件渲染 --> 
     <!-- <div id="root" v-if='1==1'> 你好,{{name}}</div> -->
    <!-- v-if和v-show交互使用小案例 -->
    <div id="root">
        <!-- v-else和v-else-if配合使用 不允许被打断 -->
        <h2>当前的n的值是{{n}}</h2>
        <button @click="n++">点我n+1</button>
        <!-- <div v-if="n === 1">vue</div>
        <div>!!!</div>
        <div v-else-if="n === 2">html</div>
        <div v-else-if="n === 3">java</div>
        <div v-else>mysql</div> -->
        <!-- template只能配合v-if使用 配合v-show是不行的 -->
      <template v-if='n===1'>
        <h2>北京</h2>
        <h2>青岛</h2>
        <h2>深圳</h2>
      </template>
    </div>
</body>
<script type="text/javascript">
   const vm=  new Vue({
        el:'#root',
        data:{
            name:'vue',
            n:0
        }
    })
</script>
</html>


14.7 总结


条件渲染

  • 1 v-if
  •       写法:
  •    (1) v-if="表达式"
  •    (2) v-else-if="表达式"
  •    (3) v-else="表达式"
  •    适用于:切换频率比较低的场景
  •    特点:不展示dom元素直接移除
  •    注意:v-if可以和v-else-if,v-else一起使用,但是要求结构不能打断
  • 2 v-show
  •  写法:v-show="表达式"
  •  适用于:切换频率较高的场景
  •  注意:不展示dom元素不会被移,仅仅是控制display的属性进行显示或者隐藏
  • 3 备注
  •  使用v-if时,元素可能无法获取到,而使用v-show一定可以获取到
相关文章
|
3天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
4天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
3天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
3天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
|
JavaScript 测试技术 容器
Vue2+VueRouter2+webpack 构建项目
1). 安装Node环境和npm包管理工具 检测版本 node -v npm -v 图1.png 2). 安装vue-cli(vue脚手架) npm install -g vue-cli --registry=https://registry.
1048 0
|
4天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
4天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
5天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
5天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
10天前
|
JavaScript
Vue基础知识总结 4:vue组件化开发
Vue基础知识总结 4:vue组件化开发