vue前端开发那些事儿

vue中v-if和v-show的区别

2021-07-24  本文已影响0人  踏莎行

不论是v-if还是v-show两者的共同点都是动态的显示DOM元素

显示Dom元素的方式不同

举个栗子,定义了两个div,用来切换的元素,一个button点击控制两个元素的显示与隐藏

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div id="app">
    <div v-if="isShow" style="width: 200px; height: 50px; background-color: aqua;"></div>
    <div v-else style="width: 200px; height: 50px; background-color: rgb(218, 204, 11);">
      <input type="text">
    </div>
    <button @click="changeVisblie">点击切换</button>
  </div>
  <script src="./vue.js"></script>
  <script>
    var vm = new Vue({
      el: "#app",
      data() {
        return {
          isShow: true
        }
      },

      methods: {
        changeVisblie() {
          this.isShow = !this.isShow
        }
      }
    })
  </script>
</body>

</html>

在浏览器中打开测试文件,通过开发者工具可以看出,页面中就不存在第二个div


Snipaste_2021-07-24_13-48-23.png

点击按钮,是第一个div消失,第二个div显示,通过工具观察也是一样,vue直接将第一个div直接删除了,创建了第二个div,然后添加进DOM树


Snipaste_2021-07-24_13-51-06.png

现在将v-if换成v-show

    <div v-show="isShow" style="width: 200px; height: 50px; background-color: aqua;"></div>
    <div v-show="!isShow" style="width: 200px; height: 50px; background-color: rgb(218, 204, 11);">

打开页面,就能看到,两个div都是存在于DOM树的,第二个div被添加了display:none,通过点击按钮,就会发现v-show里面为真的DOM元素display不等于none,v-show为假的DOM元素的display为none,隐藏元素


Snipaste_2021-07-24_13-55-02.png

数据的保存

一个是基于DOM的销毁与重新创建,一个就是基于css属性的切换,上面的例子中,第二个div有一个input,如果在input中输入内容,使用v-if的方法渲染之后输入框内容清空,而v-show会保留input框里面的数据

编译的过程

性能及使用场景

上一篇下一篇

猜你喜欢

热点阅读