VUE条件渲染

444 阅读2分钟

1.v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy 值的时候被渲染。

<h1 v-if="awesome">Vue is awesome!</h1>

也可以用 v-else 添加一个“else 块”:

<h1 v-if="awesome">Vue is awesome!</h1>
<h1 v-else>Oh no 😢</h1>

例子1

在F12中输入app.isVip=true时为VIP用户,输入false为普通用户


<body>
    <div id="app">
        <h1>用户名:{{username}}</h1>
        <h3 v-if = "isVip">用户类型:VIP</h3>
        <!-- v-if和v-else中间不能有其他内容 -->
        <h3 v-else>用户类型:普通</h3>

    </div>


    <script src="../vue.js"></script>
    <script>
        let app = new Vue({
            el:"#app",
            data:{
                username:"小米",
                isVip:true
               
            },

        })
    </script>
</body>

2.v-else-if,顾名思义,充当 v-if 的“else-if 块”,可以连续使用:

<div v-if="type === 'A'">
  A
</div>
<div v-else-if="type === 'B'">
  B
</div>
<div v-else-if="type === 'C'">
  C
</div>
<div v-else>
  Not A/B/C
</div>

类似于 v-else,v-else-if 也必须紧跟在带 v-if 或者 v-else-if 的元素之后。 例子2 判断年龄

<body>
    <div id="app">
        <h1>用户允许登陆时间</h1>
        <h3 v-if ="age>30">允许24小时登录</h3>
        <h3 v-else-if = "age>14">允许8小时登录</h3>
        <h3 v-else>允许4小时登录</h3>

    </div>

  <script src="../echarts.min.js"></script>
    <script src="../vue.js"></script>
    <script>
        let app = new Vue({
            el:"#app",
            data:{
               age:24
               
            },

        })

3.v-show

v-if vs v-show v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。

v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。

相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单地基于 CSS 进行切换。

一般来说,v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show 较好;如果在运行时条件很少改变,则使用 v-if 较好。

<body>
    <div id="app">
        <!-- v-if:不显示是,第一次就不渲染,如果内容已经不显示,将内容直接早DOM中去除 ,只渲染一次用v-if-->
        <!-- v-show:不显示时,就是display:none,会渲染在DOM上,反复使用v-show -->
        <div v-show ="isShow" id="pane">
            Hello
        </div>
        <button @click= "showPane">切换</button>
    </div>
    
    
    <script src="./vue.js"></script>
    <script>
      let app =   new Vue({
            el: "#app",
            data:{
               isShow:true
            },
           methods: {
            showPane:function(){
          
                app.isShow = !app.isShow 
            } 
           },
        })
    </script>
</body>