美文网首页
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