Vue.js 中的 `v-if` 和 `v-show`:理解与应用

简介: Vue.js 中的 `v-if` 和 `v-show`:理解与应用

官网解释

Vue.js 中的 v-if 和 v-show:理解与应用

在Vue.js开发中,v-if和v-show是两个常用的指令,用于控制元素的显示与隐藏。尽管它们在实现效果上相似,但在工作机制和适用场景上却有明显的不同。本文将对比这两个指令,并通过具体案例帮助大家更好地理解和应用它们。

v-if 与 v-show 的工作机制

v-if

v-if是条件渲染指令,它根据表达式的值,来决定是否渲染该元素及其子元素。当表达式为false时,元素从DOM中完全移除,表达式为true时,元素重新渲染并插入DOM。

特点:
  • 完全控制元素的渲染与销毁。
  • 初次加载时不渲染条件为false的元素。
  • 切换条件时有更高的性能消耗,因为会涉及DOM的重新创建和销毁。

v-show

v-show是基于CSS的显示隐藏控制,它通过切换元素的display属性来控制可见性。当表达式为false时,元素的display属性被设置为none,但该元素仍然保留在DOM中。

特点:
  • 控制元素的可见性,但不会移除元素。
  • 初次加载时会渲染所有元素,不论条件为true还是false。
  • 切换条件时性能较好,因为仅仅是切换display属性。

应用案例对比

案例一:登录按钮

假设我们有一个登录按钮,当用户未登录时显示登录按钮,登录后显示退出按钮。

使用 v-if
<template>
  <div>
    <button v-if="!isLoggedIn" @click="login">Login</button>
    <button v-if="isLoggedIn" @click="logout">Logout</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      isLoggedIn: false,
    };
  },
  methods: {
    login() {
      this.isLoggedIn = true;
    },
    logout() {
      this.isLoggedIn = false;
    },
  },
};
</script>
使用 v-show
<template>
  <div>
    <button v-show="!isLoggedIn" @click="login">Login</button>
    <button v-show="isLoggedIn" @click="logout">Logout</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      isLoggedIn: false,
    };
  },
  methods: {
    login() {
      this.isLoggedIn = true;
    },
    logout() {
      this.isLoggedIn = false;
    },
  },
};
</script>

案例二:切换大数据表格

假设我们有一个大数据表格,在用户点击按钮时显示表格,再次点击时隐藏表格。

使用 v-if
<template>
  <div>
    <button @click="toggleTable">Toggle Table</button>
    <table v-if="showTable">
      <!-- 假设这里有很多行数据 -->
    </table>
  </div>
</template>
<script>
export default {
  data() {
    return {
      showTable: false,
    };
  },
  methods: {
    toggleTable() {
      this.showTable = !this.showTable;
    },
  },
};
</script>
使用 v-show
<template>
  <div>
    <button @click="toggleTable">Toggle Table</button>
    <table v-show="showTable">
      <!-- 假设这里有很多行数据 -->
    </table>
  </div>
</template>
<script>
export default {
  data() {
    return {
      showTable: false,
    };
  },
  methods: {
    toggleTable() {
      this.showTable = !this.showTable;
    },
  },
};
</script>

使用建议

  • 使用 v-if:适用于条件变化不频繁,或初始状态为false时不需要渲染该元素的情况。例如,切换整个页面或模块。
  • 使用 v-show:适用于需要频繁切换显示隐藏状态的元素,因为它不会销毁和重建DOM结构。例如,切换标签页或简单的显示隐藏效果。

通过这篇文章,相信大家对v-if和v-show的区别和使用场景有了更清晰的认识。希望这些案例能帮助大家在实际开发中做出更合适的选择。如果你有任何问题或见解,欢迎在评论区与我们分享讨论!

相关文章
|
11月前
|
JavaScript 前端开发
如何减少Node.js应用中的全局变量?
如何减少Node.js应用中的全局变量?
645 165
|
8月前
|
存储 监控 JavaScript
基于布隆过滤器的 Node.js 算法在局域网电脑桌面监控设备快速校验中的应用研究
本文探讨了布隆过滤器在局域网电脑桌面监控中的应用,分析其高效空间利用率、快速查询性能及动态扩容优势,并设计了基于MAC地址的校验模型,提供Node.js实现代码,适用于设备准入控制与重复数据过滤场景。
292 0
|
7月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
398 3
|
8月前
|
缓存 前端开发 大数据
虚拟列表在Vue3中的具体应用场景有哪些?
虚拟列表在 Vue3 中通过仅渲染可视区域内容,显著提升大数据列表性能,适用于 ERP 表格、聊天界面、社交媒体、阅读器、日历及树形结构等场景,结合 `vue-virtual-scroller` 等工具可实现高效滚动与交互体验。
846 1
|
12月前
|
前端开发 搜索推荐 JavaScript
如何通过DIY.JS快速构建出一个DIY手机壳、T恤的应用?
DIY.JS 是一款基于原生 Canvas 的业务级图形库,专注于商品定制的图形交互功能,帮助开发者轻松实现个性化设计。适用于 T 恤、手机壳等多种商品场景。它自带丰富功能,无需从零构建,快速集成到项目中。通过创建舞台、添加模型、定义 DIY 区域和添加素材四个步骤即可完成基础用法。支持在线演示体验,文档详细,易上手。
551 57
|
8月前
|
资源调度 负载均衡 JavaScript
使用PM2工具部署Vue.js应用于服务器
以上步骤完成之后,你就成功利⽤ PM⼆工具将 Vuejs 应⽰程序部署至服 务 器,并且配合反向代理实现了高效稳定访问及负载均衡功能。
339 0
|
10月前
|
JavaScript API 开发者
Vue框架中常见指令的应用概述。
通过以上的详细解析,你应该已经初窥Vue.js的指令的威力了。它们是Vue声明式编程模型的核心之一,无论是构建简单的静态网站还是复杂的单页面应用,你都会经常用到。记住,尽管Vue提供了大量预定义的指令,你还可以创建自定义指令以满足特定的需求。为你的Vue应用程序加上这些功能增强器,让编码变得更轻松、更愉快吧!
191 1
|
11月前
|
监控 算法 JavaScript
公司局域网管理视域下 Node.js 图算法的深度应用研究:拓扑结构建模与流量优化策略探析
本文探讨了图论算法在公司局域网管理中的应用,针对设备互联复杂、流量调度低效及安全监控困难等问题,提出基于图论的解决方案。通过节点与边建模局域网拓扑结构,利用DFS/BFS实现设备快速发现,Dijkstra算法优化流量路径,社区检测算法识别安全风险。结合WorkWin软件实例,展示了算法在设备管理、流量调度与安全监控中的价值,为智能化局域网管理提供了理论与实践指导。
275 3
|
12月前
|
存储 JavaScript 前端开发

热门文章

最新文章

下一篇
开通oss服务