• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 对比一下Vue指令v-show 和 v-if,聊聊使用场景

对比一下Vue指令v-show 和 v-if,聊聊使用场景

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了Vue指令,v-show和 v-if使用场景等相关知识,希望对您有所帮助

本篇文章对比一下Vue指令v-show 和 v-if,介绍一下v-show 和 v-if 的区别,并聊聊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 元素整个添加或删除。

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<VShowElement> = {  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          )        }      }    })  })


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 对比一下Vue指令v-show 和 v-if,聊聊使用场景

相关文章

  • 2022-04-29Photoshop制作苹果语音助理Siri图标动画教程
  • 2022-04-29推荐六款移动端 UI 框架
  • 2022-04-29怎么解决phpmyadmin显示MySQL数据表“使用中” 修复后依然无效的问题
  • 2022-04-29Photoshop制作卡通风格的3D立体字教程
  • 2022-04-29AI和PS快速制作漂亮复古海报
  • 2022-04-29浅谈css grid比Bootstrap更适合创建布局的原因
  • 2022-04-29聊聊小程序怎么实现“全文收起”功能
  • 2022-04-29Linux中php安装目录在哪个文件夹
  • 2022-04-29N种使用 CSS 实现三角形的技巧
  • 2022-04-29重新对百度支付进行编写封装(百度智能小程序支付)

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • htaccess怎么关闭php错误
    • WordPress控制文章评论最少字数和最大字数
    • PHP正则表达式字符如何转义
    • 浅析利用nodejs怎么给图片添加半透明水印(方法详解)
    • Photoshop制作一个古典的小木箱
    • 去除dedecms织梦升级友情链接增加织梦链投放链接
    • Photoshop制作金属质感的工具图标
    • CDR制作冰块立体字
    • PhotoShop制作逼真的补丁文字效果的教程
    • 浅析什么是装饰器?Vue中怎么使用装饰器?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有