千家信息网

Vue指令v-show和v-if怎么使用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本文小编为大家详细介绍"Vue指令v-show和v-if怎么使用",内容详细,步骤清晰,细节处理妥当,希望这篇"Vue指令v-show和v-if怎么使用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢
千家信息网最后更新 2026年11月03日Vue指令v-show和v-if怎么使用

本文小编为大家详细介绍"Vue指令v-show和v-if怎么使用",内容详细,步骤清晰,细节处理妥当,希望这篇"Vue指令v-show和v-if怎么使用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、v-show 和 v-if 的区别

  • 在 vue 中 v-show 和 v-if 都可以控制元素是否在页面中现实。

  • v-show 的显示隐藏是操作元素css的 display 属性,所以使用 v-show 来隐藏元素的时候,元素的 dom 节点依旧还在页面中;v-if 的显示隐藏则是将 dom 元素整个添加或删除。【相关推荐:vuejs视频教程】

  • v-if 的切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;v-show 只是简单的操作css的 display 属性。

  • v-if 是真正的条件渲染,它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。只有渲染条件为假时,并不做操作,直到为真才渲染。

  • v-show 由 false 变为 true 的时候不会触发组件的生命周期,v-if 由 false 变为 true的时候,触发组件的 beforeCreate 、 create 、 beforeMount 、 mounted 生命周期钩子,由 true 变为 false 的时候触发组件的 beforeDestory 、destoryed 方法。

  • 在性能消耗方面 v-if 有更高的切换消耗; v-show 有更高的初始渲染消耗。

二、v-show 和 v-if 使用场景

  • v-if 与 v-show 都能控制 dom 元素在页面的显示和隐藏

  • v-if 相比 v-show 开销更大的(直接操作 dom 节点增加与删除),如果需要非常频繁地切换,则使用 v-show 较好,如果在运行时条件很少改变,则使用 v-if 较好

三、v-show 和 v-if 原理分析

  • v-show 不管是 true 还是 false,元素总是会被渲染,源码中如果绑定了 v-show 指令的元素外层套了一层 transition 的话,就执行 transition ,如果 el 外层没有嵌套 transition 的话,就直接设置 el.style.display

export const vShow: ObjectDirective = {  beforeMount(el, { value }, { transition }) {    el._vod = el.style.display === 'none' ? '' : el.style.display    if (transition && value) {      transition.beforeEnter(el)    } else {      setDisplay(el, value)    }  },  mounted(el, { value }, { transition }) {    if (transition && value) {      transition.enter(el)    }  },  updated(el, { value, oldValue }, { transition }) {    // ...  },  beforeUnmount(el, { value }) {    setDisplay(el, value)  }}
  • v-if 是在抽象语法树转成代码字符串的时候被获取来做判断的,如果 v-if 为false ,render 函数生成的 vnode 不会包含要渲染的节点,而是一个注释的 vnode 节点作为占位

export const transformIf = createStructuralDirectiveTransform(  /^(if|else|else-if)$/,  (node, dir, context) => {    return processIf(node, dir, context, (ifNode, branch, isRoot) => {      // ...      return () => {        if (isRoot) {          ifNode.codegenNode = createCodegenNodeForBranch(            branch,            key,            context          ) as IfConditionalExpression        } else {          // attach this branch's codegen node to the v-if root.          const parentCondition = getParentCondition(ifNode.codegenNode!)          parentCondition.alternate = createCodegenNodeForBranch(            branch,            key + ifNode.branches.length - 1,            context          )        }      }    })  })

读到这里,这篇"Vue指令v-show和v-if怎么使用"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

元素 时候 组件 切换 指令 节点 文章 条件 过程 页面 消耗 事件 内容 周期 外层 属性 生命 控制 监听 合适 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州为想互联网科技有限公司 互联网科技垄断 网络科技有限互联网 北京互联网络科技有限公司 深圳齐家互联网科技 腾讯科技 互联网女皇 科技创新互联网企业 兼蜜互联网科技 深圳艾佳互联网科技 新华互联网科技校企合作 恒银科技与互联网金融 晓花互联网科技有限公司网址 迪庆互联网科技招生 佛山市翊博互联网络科技有限公司 四川互联网展示科技馆设计 互联网公司属于科技吗 科技互联网专业工作会议发言稿 东风日产互联网科技公司叫什么 北京瑞云互联网科技有限公司 中国主要互联网科技公司 互联网与新科技 成都狮子座互联网科技 互联网科技咨询 深圳市运趣互联网科技有限公司 互联网为啥属于高科技 互联网软件和科技 呼和浩特新华互联网科技学院 特约风豹互联网科技为什么扣费 广州千川互联网科技有限公司 广东鹅鹅鹅互联网科技有限公司
0