美文网首页
vue学习资料三(v-if、v-else、v-show、v-fo

vue学习资料三(v-if、v-else、v-show、v-fo

作者: 九泰修行 | 来源:发表于2017-02-16 20:50 被阅读131次

    VUE

    模板指令

    • 还记得underscore.js中if如何书写的吗?
    <script src='underscore.js'></script>
    <script id="tpl" type="text/template">
        <%if (isShow) {%><h1><%=title%></h1><%} else {%> <h1><%=otherTitle%></h1> <%}%>
    </script>
    <script>
    var data = {
        isShow:true,
        title:'hello',
        otherTitle:'world'
    }
    var demo = _.template(document.getElementById('tpl').innerHTML)(data)
    console.log(demo)
    </script>
    

    条件判断v-if

    • 直接在元素上添加v-if
    • 如果该数据KEY是true的话,我们将该dom元素显示,否则将该dom元素隐藏
    • v-else: 与v-if配合使用,如果if不成立则显示v-else;
    <div id="app">
        <h1><span v-if="isSpecial">特价</span><span v-else>原价</span>{{price | currency "¥"}}</h1>
    </div>
    <script src="vue.js"></script>
    <script>
        new Vue({
            el:"#app",
            data:{
                isSpecial:false,
                price:100
            }
        })
    </script>
    
    • 如果要操作多个元素判断,可以使用template标签
    <div id="app">
        <h1>
        <template v-if="isSpecial">
            <span>今日</span>
            <span>特价</span>
        </template>
        <template v-else>
            <span>原价</span>
        </template>
            {{price | currency "¥"}}
        </h1>
    </div>
    <script src="vue.js"></script>
    <script>
        new Vue({
            el:"#app",
            data:{
                isSpecial:false,
                price:100
            }
        })
    </script>
    
    • 使用underscore.js把一个列表渲染出来:
    <ul id="app">
        
    </ul>
    
    <script src="../underscore.js"></script>
    <script type="text/template" id="tpl">
        <%for (var i = 0;i < news.length;i++){%>
            <li><%=news[i]%></li>
        <%}%>
    </script>
    <script>
    var data = {
        news:[
        '最高法原副院长贪1.1亿被判无期',
        '学校发来课表 家长一点被刷5200',
        '怼俄罗斯!特朗普向精英阶层表态'
        ]
    } 
    var tpl = document.getElementById('tpl').innerHTML;
    var html = _.template(tpl)(data);
    document.getElementById('app').innerHTML = html;
    </script>
    

    使用vue循环模板

    v-for = "item in data"
    
    • item 是data数组中的一个成员;
    <div id="app">
        <ul>
        <!-- li需要循环 把news中的每一条数据转换成item,item被看成是news中的每一个成员-->
            <li v-for="item in news">{{item}}</li>
        </ul>
    </div>
    
    <script src="vue.js"></script>
    <script>
    var data = {
        news:[
        '最高法原副院长贪1.1亿被判无期',
        '学校发来课表 家长一点被刷5200',
        '怼俄罗斯!特朗普向精英阶层表态'
        ]
    } 
    new Vue({
        el:"#app",
        data:data
    })
    </script>
    
    • 有时候data的数据结构比较复杂该如何?
    <div id="app">
        <ul>
        <!-- li需要循环 把news中的每一条数据转换成item,item被看成是news中的每一个成员-->
            <li v-for="item in news"><span v-if="item.type">{{item.type}} | </span>{{item.title}}</li>
        </ul>
    </div>
    
    <script src="vue.js"></script>
    <script>
    var data = {
        news:[
        {
            title:'最高法原副院长贪1.1亿被判无期',
            type:''
        },
        {
            title:'学校发来课表 家长一点被刷5200',
            type:'金融'
        },
        {
            title:'怼俄罗斯!特朗普向精英阶层表态',
            type:'全球'
        }
        ]
    } 
    new Vue({
        el:"#app",
        data:data
    })
    </script>
    

    使用v-if:如果type有值,则会显示前面的标签,如果没有则不会显示;

    如果v-for需要循环多个节点元素,我们也可以使用template模板

    <div id="app">
        <ul>
            <template v-for="item in news">
                <li><span v-if="item.type">{{item.type}} | </span>{{item.title}}</li>
                <hr>
            </template>
        </ul>
    </div>
    

    v-show

    v-show = "key",如果key是true,则显示该元素;
    他的作用也是显示,但是只能处理一个标签;

    实现支付宝登录页面实时输入框输入内容后,显示下拉框匹配邮箱后缀的例子:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            .app{
                margin:50px auto;
                width: 500px;
                border:1px solid #ccc;
                padding-top: 5px;
            }
            label{
                width: 120px;
                display: inline-block;
                text-align: right;
            }
            input{
                height: 40px;
                line-height: 40px;
                padding-left: 10px;
                width: 250px;
            }
            ul{
                padding: 0;
                list-style: none;
                border:1px solid #ccc;
                width: 250px;
                margin-left: 120px;
                margin-top: -1px;
    
            }
            li{
                list-style: none;
                padding: 0;
    
            }
            li:hover{
                background-color: #ccc;
            }
        </style>
    </head>
    <body>
    <div id="app" class="app">
        <div>
            
            <label for="inp">用户名</label><input type="text" id="inp" v-model="num">
            <ul v-show="checkNum">
            <!-- 由于email数据是一个数组 所以渲染列表要循环-->
                <li v-for="item in email">{{num}}{{item}}</li>
            </ul>
        </div>
    </div>
    <script src="vue.js"></script>
    <script>
        new Vue({
            el:"#app",
            data:{
                num:'',
                email:['@qq.com','@163.com','@139.com','@sina.com','@189.com']
    
            },
            computed:{
                checkNum:function(){
                   return this.num && this.num.indexOf('@') < 0
                    }
             }
        })
    </script>
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:vue学习资料三(v-if、v-else、v-show、v-fo

          本文链接:https://www.haomeiwen.com/subject/lhwhwttx.html