v-for指令的使用
<div id="app">
<ul>
<li v-for="(item,index) in msg1">{{ item }}---{{ index }}</li>
<br>
<li v-for="(value,key,index) of msg2">{{ key }}---{{ value }}---{{ index }}</li>
</ul>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
msg1: ["橘子","香蕉","苹果"],
msg2: { a: "apple",b: "banana",o: "orange"}
}
})
</script>
上图运行结果如下
由此可以发现:
1. 当我们在data里面存放一个数组的时候,在v-for指令中可以添加item、index两个选项,分别表示数组中的每一项和每一项所对应的索引,可以通过插值表达式将结果显示出来
2. 当我们在data里面放一个对象的时候,在v-for指令中可以添加value、key、index三个选项,分别表示值、键、索引,同样可以通过插值表达式显示出来
key值的注意事项
首先我们使用数据的index索引来作为key值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<div v-for="(item,index) in List" :key="index">key:{{ index }}---index:{{ index }}---name:{{ item.name }}</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
List: [
{id: 1, name: "t1"},
{id: 2, name: "t2"},
{id: 3, name: "t3"},
]
}
})
</script>
</body>
</html>
在data里面添加一条插队的数据
<div id="app">
<div v-for="(item,index) in List" :key="index">key:{{ index }}---index:{{ index }}---name:{{ item.name }}</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
List: [
{id: 1, name: "t1"},
{id: 4, name: "插队"},
{id: 2, name: "t2"},
{id: 3, name: "t3"},
]
}
})
</script>
运行结果分别如下
可以发现除了第一条数据可以复用以外,另外三条数据都需要重新渲染,因为key值发生了变化;这时候就可以体现出了一个效率问题,只插入了一条数据,却要重新渲染三条数据
再使用数据的id作为key值
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<div v-for="(item,index) in List" :key="item.id">key:{{ item.id }}---index:{{ index }}---name:{{ item.name }}</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
List: [
{id: 1, name: "t1"},
{id: 2, name: "t2"},
{id: 3, name: "t3"},
]
}
})
</script>
</body>
</html>
在data里面添加一条插队的数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="vue.js"></script>
</head>
<body>
<div id="app">
<div v-for="(item,index) in List" :key="item.id">key:{{ item.id }}---index:{{ index }}---name:{{ item.name }}</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
List: [
{id: 1, name: "t1"},
{id: 4, name: "插队"},
{id: 2, name: "t2"},
{id: 3, name: "t3"},
]
}
})
</script>
</body>
</html>
运行结果分别如下
可以发现,只有一条数据发生了变化,因为其他数据的id都没变,所以key值也没变,表明当我们使用id为key值时,当我们修改数据,它只会改变修改项的内容,不会对别的数据进行更新和修改,所以一般推荐使用id作为key值来配合v-for使用
总结:使用v-for指令能够完成数据遍历,使用id作为key值而不用index主要原因是:使用index时,修改一条数据,所有的数据全部被改变。使用id,修改数据时只会将修改的数据进行改变,别的数据不会变化
- 还没有人评论,欢迎说说您的想法!