Vue ---条件渲染

一.v-if


官方的解释为:

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

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

大家也许会一头雾水,下面由我来给大家解释以下我的理解:
其实,大家可以将awesome看作一个布尔值,它要么为true,要么为false,当为true时,它就执行,为false时,就不执行(当然如果有else,就会执行else中的内容)。


先来看一段代码实例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id = "app">
    <h1>用户名:{
    
    {
    
    message}}</h1>
    <h1 v-if="VIP">Hello Vue</h1>
    <h1 v-else>Hello myVue</h1>
</div>
<script src = "../js/vue.js"></script>
<script type = "text/javascript">
    const app = new Vue({
    
    
        el:"#app",
        data:{
    
    
            message:"Hello message",
            VIP :true
        }
    })
</script>
</body>
</html>

直接运行的结果如下:
在这里插入图片描述
在控制台console输入 app.VIP = false 后变成了如下:

在这里插入图片描述


如果我们想要切换多个元素,可以在template上使用v-if.如下:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id = "app">
    <template v-if = "VIP">
        <h1>Hello</h1>
        <h1>World</h1>
    </template>
</div>
<script src = "../js/vue.js"></script>
<script type = "text/javascript">
   const app = new Vue({
    
    
       el : "#app",
       data : {
    
    
           message : "Hello",
           VIP : true,
       }
   })
</script>
</body>
</html>

在这里插入图片描述
当VIP为false时,两个同时渲染
在这里插入图片描述

二.v-show


v-show是另一个用于根据条件展示元素。但是v-show会始终渲染在dom上,只是改变样式,而v-if是真的渲染,它能确保切换过程中事件监听器和子块组适当的销毁和重建。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style type = "text/css">
        #css1{
    
    
            background-color:green;
            height:300px;
            width:300px;
        }
    </style>
</head>
<body>
    <div id = "app">
        <h1 id = "css1" v-show = "VIP">my {
    
    {
    
    message}}</h1>
        <button @click = "myShow">myButton</button>
    </div>
    <script src = "../js/vue.js"></script>
    <script type = "text/javascript">
        const app = new Vue({
    
    
         el : "#app",
            data : {
    
    
                message : "Hello",
                VIP:true,
            },
            methods: {
    
    
                myShow : function(){
    
    
                    app.VIP = !app.VIP;
                }
            }
        })
    </script>
</body>
</html>

当我们运行,点击按钮后,打开Elements如下:在这里插入图片描述

我们看到style = “display:none”,样式改变了,但是没有销毁,但是如果是v-if,就看不到这一行,因为它已经销毁了。


三.v-if和v-for的对比

v-if

不显示时,第一次就不渲染,如果内容已经显示,并且变为不显示,则内容直接从dom中去除,适合只渲染一次

v-for

不显示时,就会改为display:none,但会渲染在dom上,适合多次的渲染。

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

猜你喜欢

转载自blog.csdn.net/weixin_45965358/article/details/115263680