zoukankan      html  css  js  c++  java
  • 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 更高的优先级。但是不推荐二者同时使用。

  • 相关阅读:
    .net开发COM组件之组件签名&注册
    msmq访问格式
    IIS宿主WCF服务*.svc Mime类型映射
    匿名方法的机种书写形式
    GMTUTC YYYY-MM-DDTHH:mm:ss.sssZ、YYYY-MM-DDTHH:mm:ss.sss+8:00意义及与北京时间转换
    允许浏览器下载exe.config文件
    WCF部署失败
    原码、补码、反码
    Java 符号引用 与 直接引用
    计算机理论基础知识
  • 原文地址:https://www.cnblogs.com/ellen-mylife/p/14071387.html
Copyright © 2011-2022 走看看