• 6Vue条件渲染


     条件渲染

    v-if

    用于条件性的渲染内容,这块内容在指令的表达式返回true的时候被渲染。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="./vue.js"></script>
        <title>条件渲染</title>
    </head>
    <body>
        <div id="app">
            <div v-if="show">你好呀</div>
        </div>
        
    </body>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{
                show:false
            }
        })
    </script>
    </html>

     

    v-show

     还有和v-if相似的v-show:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="./vue.js"></script>
        <title>条件渲染</title>
    </head>
    <body>
        <div id="app">
            <div v-if="show">你好呀</div>
            <div v-show="show">嘻嘻嘻</div>
        </div>
        
    </body>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{
                show:false
            }
        })
    </script>
    </html>

    v-show指令下的dom元素虽然看不见,但是还是渲染了的,只不过加了一个style="display:none",这个dom还是存在的。而v-if为false的情况下,这个dom是不存在的,会被适当的销毁或重建。所以,v-show的性能会高一点,不会频繁的删除增加dom。

    v-else

    v-if还可以配合v-else,如果v-if为false,就显示v-else对于的dom,但是v-if和v-else两个元素需要紧贴在一起,不然会报错

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="./vue.js"></script>
        <title>条件渲染</title>
    </head>
    <body>
        <div id="app">
            <div v-if="show">你好呀</div>
            <div v-else>bey bey了您</div>
        </div>
        
    </body>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{
                show:false
            }
        })
    </script>
    </html>

    v-else-if

    还有v-else-if

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="./vue.js"></script>
        <title>条件渲染</title>
    </head>
    <body>
        <div id="app">
            <div v-if="show==='a'">你好呀</div>
            <div v-else-if="show==='b'">又见到你了</div>
            <div v-else>bey bey了您</div>
        </div>
        
    </body>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{
                show:'b'
            }
        })
    </script>
    </html>

    key值问题

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="./vue.js"></script>
        <title>条件渲染</title>
    </head>
    <body>
        <div id="app">
            <div v-if="show">
                邮箱:<input />
            </div>
            <div v-else>
                用户名:<input />
            </div>
        </div>
        
    </body>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{
                show:true
            }
        })
    </script>
    </html>

    进行show值的修改,结果如下

     我们会从上面两张图片发现,在show值改变的同时,确实从邮箱变成了用户名,但是input框中的内容确没有清空。

     这是因为vue会尝试复用页面上的dom,但是在复用的过程中可能导致原来的内容不会清空。属于diff算法的问题

    我们可以加一个key值,Vue会知道这是页面上唯一的一个元素,Vue就不会去复用它了。

    代码如下:

     <div id="app">
            <div v-if="show">
                邮箱:<input key="email"/>
            </div>
            <div v-else>
                用户名:<input key="usename" />
            </div>
        </div>

    当 v-if 与 v-for 一起使用时,v-for 具有比 v-if 更高的优先级。但是不推荐二者同时使用。

  • 相关阅读:
    常见加密算法概述
    IDEA常见错误解决
    linux Find命令教程
    用注册表更改DNS的代码分享
    关于javascript中的typeof和instanceof介绍
    javascript instanceof,typeof的区别
    Javascript typeof 用法
    浅析JavaScript中的typeof运算符
    玩转Linux文件描述符和重定向
    shell脚本 批量转换目录下文件编码
  • 原文地址:https://www.cnblogs.com/ellen-mylife/p/14071387.html
Copyright © 2020-2023  润新知