美文网首页Vue学习Web前端之路让前端飞
vue学习笔记5——v-for(list rendering)

vue学习笔记5——v-for(list rendering)

作者: 椰果粒 | 来源:发表于2017-05-14 16:42 被阅读861次

v-for迭代分为数组迭代和对象迭代

  1. 作用 : 控制HTML元素中的循环,实现语句列表的生成
  2. 用法 : v-for = “item in 集合”,其中item指集合的子项,集合指被遍历的元素,通常为数组
  3. 用处 : 用处:写在谁上边,谁遍历
数组迭代

栗子1


运行结果 :

栗子2 : 可以使用of代替in来使用
    <ul id="app">
    <li v-for="item of items">
        {{ item.message }}
    </li>
    </ul>
    var app = new Vue({
    el : '#app',
    data : {
        items : [
            {message : 'foo'},
            {message : 'bar'},
            {message : 'jewel'}
        ]
    }
    })

运行结果 :
 foo
 bar
 jewel
栗子3 : v-for还支持第二个可选参数作为当前项的索引

    <ul id="app2">
    <li v-for="( item, index ) in items">
        {{ parentMessage }} - {{ index }} - {{ item.message }}
    </li>
    </ul>
    var app2 = new Vue({
    el : '#app2',
    data : {
        parentMessage : 'Parent',
        items : [
            { message : 'foo'},
            { message : 'bar'}      
        ]
    }
    })

运行结果 :
Parent - 0 - foo
Parent - 1 - bar
栗子4 : 可以用template渲染多个元素块

<ul id="app2">
    <template v-for="item in items">
        <p> {{ parentMessage }} </p>
        <li> {{ item.message }}</li>
    </template>
</ul>
var app2 = new Vue({
    el : '#app2',
    data : {
        parentMessage : 'Parent',
        items : [
            { message : 'foo'},
            { message : 'bar'}      
        ]
    }
})

运行结果 :


栗子5 : 整数迭代
    <div id="app4">
    <span v-for="n in 10">
        {{ n }}
    </span>
    </div>
    var app4 = new Vue({
    el : '#app4'
    });

运行结果 : 1 2 3 4 5 6 7 8 9 10
栗子6 : 也可以将10替换成一个变量,从data中提取数据

    <div id="app4">
    <span v-for="n in m">
        {{ n }}
    </span>
    </div>
    var app4 = new Vue({
    el : '#app4',
    data : {
        m : 8
    }
    })

运行结果 : 1 2 3 4 5 6 7 8

对象迭代

栗子1 :默认遍历的是value的值

<ul id="app3" class="demo">
    <li v-for="value in object">
        {{ value }}
    </li>
</ul>
var app3 = new Vue({
    el : '#app3',
    data : {
        object : {
            FirstName : 'john',
            lastName : 'bob',
            Age : 30
        }
    }
})

运行结果 :
 john
 bob
 30
栗子2 : 可以提供第二个参数作为键名

<ul id="app3" class="demo">
    <li v-for="(value, key) in object">
        {{ key }} : {{ value }}
    </li>
</ul>

运行结果 :
 FirstName : john
 lastName : bob
 Age : 30
栗子3 :还可以接受第三个参数作为索引

<ul id="app3">
    <li v-for="(value, key, index) in object">
        {{ index }} : {{ key }} : {{ value }}
    </li>
</ul>

运行结果 :
 0 : FirstName : john
 1 : lastName : bob
 2 : Age : 30
v-if and v-for
when they exist on the same node,v-for has a highter priority than v-if,that means the v-if will be run on each oteration of the loop separately.this is vary useful when you want to render nodes for only some items
举个栗子

    <ul id="app6">
    <li v-for="(todo, index) in todos " v-if="index<2">
        {{ todo }} : {{ index }}
    </li>
    </ul>
    var app6 = new Vue({
    el : '#app6',
    data : {
        todos : ['hello', 'world', 'a', 'b', 'v']
    }
});

运行结果 :
hello : 0
world : 1


新增两个例子,分别对应数字排序和对象的属性排序
1. 数字排序

<li v-for="num in sortItem">{{num}}</li>
var app = new Vue({
    el : '#app',
    data : {
        number : [1,2,3,4,5,11,32,25]   // 元素极其相似,那么就放在数组中
    },
    computed : {
        sortItem : function(){
            return this.number.sort(sortNumber);
        }
    }
})
function sortNumber(a,b){  // 此函数代表了对数字的排序算法。
    return a-b;
}

在JavaScript中,默认的排序方式是按照ascll码排序,即12排在1和3之间,所以需要用sortNumber函数将其转化成数字间的排序
在data中存放的是一组或一个数据,最好不要进行数据将的处理(比如排序,转化成大小写等),这些计算属性我们可以放在computed中进行

相关文章

网友评论

    本文标题:vue学习笔记5——v-for(list rendering)

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