• 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,聊聊使用场景

作者:站长图库 字体:[增加 减小] 来源:互联网

站长图库向大家介绍了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,聊聊使用场景

相关文章

  • php怎么将ppt转jpg图片
  • 详解vue2项目优雅封装echarts地图的方法
  • Phpcms V9导航循环下拉菜单实例文件分享
  • PHP中$_SESSION获取不到值怎么办
  • 解决网站打开出现"SEC_ERROR_EXPIRED_CERTIFICATE"问题
  • 详解如何提升WordPress打开前后台的速度
  • 一分钟学会Docker安装phpmyadmin
  • Photoshop绘制逼真的毛线衣图标教程
  • Photoshop绘制玻璃质感的APP软件图标
  • 帝国CMS后台搜索报错Illegal mix of collations for operation 'like'

文章分类

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

最近更新的内容

    • Dedecms文章审核后给会员增加积分或者金币的办法
    • Thinkphp5整合结巴分词实现网站模糊搜索
    • laravel-mix怎么自动压缩html模板文件
    • PHP生成唯一ID的四种方法介绍
    • 带大家聊聊小程序中的几种页面传参方式
    • 巧用“添加至百度首页”提升排名
    • PHP网站常见安全漏洞,及相应防范措施总结
    • CorelDraw制作可爱的彩色塑料字教程
    • PHP如何删除Array数组指定key
    • div在屏幕中如何实现水平居中和垂直居中

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

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