首页 > 其他分享 >vue3 基础-条件渲染 v-if 和 v-show

vue3 基础-条件渲染 v-if 和 v-show

时间:2022-08-28 13:13:15浏览次数:48  
标签:const 渲染 app show else vue3 root 节点

本篇讲 vue 中对 dom 元素节点进行 "显示和隐藏" 的实现方式指令, 即 v-if 和 v-show. 其实一句话就能说明白, v-if 的底层是从 dom 树中增删节点; 而 v-show 的底层是 "display = none" 和 "display = block".

v-if

<!DOCTYPE html>
<html lang="en">
<head>
  <title>v-if</title>
  <script src="https://unpkg.com/vue@3"></script>
</head>
<body>
  <div id="root"></div>
  <script>
    const app = Vue.createApp({
      data () {
        return { show: true }
      },
      template: `<div v-if="show">hello, youge</div>`
    })
  const vm = app.mount('#root')
  </script>
</body>
</html>

当 show = false 时候, 该元素节点不会进行展示. 查看渲染的代码可以发现, 在这个 root 节点下, 该 div 已经被删除掉了啦, 剩下了一个寂寞.

<-- v-if -->

v-show

<!DOCTYPE html>
<html lang="en">
<head>
  <title>v-show</title>
  <script src="https://unpkg.com/vue@3"></script>
</head>
<body>
  <div id="root"></div>
  <script>
    const app = Vue.createApp({
      data () {
        return { show: true }
      },
      template: `<div v-show="show">hello, youge</div>`
    })
  const vm = app.mount('#root')
  </script>
</body>
</html>

当 show: false 时, 该元素节点也不会进行展示, 查看渲染的代码可以发现, 在这个 root 节点下, 该 div 还是存在的

<div style="display: none;">hello, youge</div>

如果需要频繁显示和隐藏切换的, 就建议用 v-show, 如果低频操作就用 v-if 这个看个人喜好吧.

v-if | v-else-if | v-else

在 vue 里还提供了一种 if-else 这样的多分支条件来灵活配置哦.

<!DOCTYPE html>
<html lang="en">
<head>
  <title>v-if-else</title>
  <script src="https://unpkg.com/vue@3"></script>
</head>
<body>
  <div id="root"></div>
  <script>
    const app = Vue.createApp({
      data () {
        return {
          show: true,
          condition_01: false,
          condition_02: true
        }
      },
      template: `
      <div v-show="show">hello, youge</div>

      <div v-if="condition_01">if</div>
      <div v-else-if="condition_02">else-if</div>
      <div v-else>else</div>
      `
    })
  const vm = app.mount('#root')
  </script>
</body>
</html>

需注意的是这里的 v-if, v-else-if 和 v-else 的这三个 dom 节点要连续一起保证这个分支结构的闭环.

最后再来小结一下吧:

  • v-show: 不会删掉 dom元素, 底层是 "display=none", 适用于频繁需要显示或隐藏的场景
  • v-if: 会增删掉 dom 元素节点, 适用于不那么频繁显示隐藏的场景, 如登录呀, 切换主题啥的
  • v-if, v-else-if, v-else: 可以进行分支判断, 这个我倒是在工作中用的不太多

标签:const,渲染,app,show,else,vue3,root,节点
From: https://www.cnblogs.com/chenjieyouge/p/16632600.html

相关文章

  • Vue3+vite+js 配置别名@报错
    Vue3+vite+js配置别名@报错vue3项目中配置vite.config.js时使用path模块报错,一直警告找不大到path模块原因:path模块是node.js内置的功能,但是node.js本身并不支持ts解决......
  • vue3项目-小兔鲜儿笔记-02-首页模块01
    1.less自动化导入安装一个vue-cli插件,自动导入less文件vueaddstyle-resources-loader2.头部分类导航组件渲染实现头部一级分类和二级分类的渲染基本步骤:定......
  • vue3 基础-样式绑定语法
    本篇讲vue通过数据去进行dom样式的绑定操作,主要分为字符串,数组,对象等方式,这个非常好理解,凭着我们朴素的情感就能一步领悟到位的,就还是演示一段吧.字符&......
  • Vite+vue3发布后使用的静态图片无法显示Failed to construct ‘URL‘: Invalid URL
    1.使用官方引用静态资源处理,需要把图片放在public里面getImageUrl(name){returnnewURL(`./img/${name}.png`,import.meta.url).href} 2.本地运行项目中可以......
  • Vite + Vue3 + Pinia + es6 + TypeScript 搭建项目
    vite中文参考文档:https://vitejs.cn/guide/#scaffolding-your-first-vite-project执行 npminitvite@latest步骤如下图:下载依赖npmi 启动项目:npmrundev ......
  • 3D高级渲染器Artlantis Studio
    ArtlantisStudio2021forMac是Mac平台上一款专业的3D高级渲染器,artlantismac专为设计师和建筑师所设计,能够为您快速创建出VR全景,动画和3D等效果。artlantis202凭借着......
  • Artlantis studio 2021.2 for Mac(3D渲染工具)
    Artlantisstudio2021forMac是Mac平台上一款专业的3D高级渲染器,artlantismac版专为设计师和建筑师所设计,能够为您快速创建出VR全景,动画和3D透视图等效果。artl......
  • ctfshow 萌新web系列--4
    <html><head><title>ctf.show萌新计划web1</title><metacharset="utf-8"></head><body><?php#包含数据库连接文件include("config.php");#判断get提......
  • vue3 基础-常用模板语法
    一个vue的单文件SAP(singlepagewebapplication)即在一个.vue为后缀的文件中,会包含3个部分.模板:html逻辑:javascript样式:css这种同时存在,然......
  • ctfshow 萌新web系列--3
    <html><head><title>ctf.show萌新计划web1</title><metacharset="utf-8"></head><body><?php#包含数据库连接文件include("config.php");#判断get提......