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>
上圖運(yùn)行結(jié)果如下
由此可以發(fā)現(xiàn):
1. 當(dāng)我們?cè)赿ata里面存放一個(gè)數(shù)組的時(shí)候,在v-for指令中可以添加item、index兩個(gè)選項(xiàng),分別表示數(shù)組中的每一項(xiàng)和每一項(xiàng)所對(duì)應(yīng)的索引,可以通過(guò)插值表達(dá)式將結(jié)果顯示出來(lái)
2. 當(dāng)我們?cè)赿ata里面放一個(gè)對(duì)象的時(shí)候,在v-for指令中可以添加value、key、index三個(gè)選項(xiàng),分別表示值、鍵、索引,同樣可以通過(guò)插值表達(dá)式顯示出來(lái)?
key值的注意事項(xiàng)
首先我們使用數(shù)據(jù)的index索引來(lái)作為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里面添加一條插隊(duì)的數(shù)據(jù)
<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: "插隊(duì)"},
{id: 2, name: "t2"},
{id: 3, name: "t3"},
]
}
})
</script>
運(yùn)行結(jié)果分別如下
可以發(fā)現(xiàn)除了第一條數(shù)據(jù)可以復(fù)用以外,另外三條數(shù)據(jù)都需要重新渲染,因?yàn)閗ey值發(fā)生了變化;這時(shí)候就可以體現(xiàn)出了一個(gè)效率問(wèn)題,只插入了一條數(shù)據(jù),卻要重新渲染三條數(shù)據(jù)
再使用數(shù)據(jù)的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里面添加一條插隊(duì)的數(shù)據(jù)
<!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: "插隊(duì)"},
{id: 2, name: "t2"},
{id: 3, name: "t3"},
]
}
})
</script>
</body>
</html>
運(yùn)行結(jié)果分別如下
可以發(fā)現(xiàn),只有一條數(shù)據(jù)發(fā)生了變化,因?yàn)槠渌麛?shù)據(jù)的id都沒(méi)變,所以key值也沒(méi)變,表明當(dāng)我們使用id為key值時(shí),當(dāng)我們修改數(shù)據(jù),它只會(huì)改變修改項(xiàng)的內(nèi)容,不會(huì)對(duì)別的數(shù)據(jù)進(jìn)行更新和修改,所以一般推薦使用id作為key值來(lái)配合v-for使用
總結(jié):使用v-for指令能夠完成數(shù)據(jù)遍歷,使用id作為key值而不用index主要原因是:使用index時(shí),修改一條數(shù)據(jù),所有的數(shù)據(jù)全部被改變。使用id,修改數(shù)據(jù)時(shí)只會(huì)將修改的數(shù)據(jù)進(jìn)行改變,別的數(shù)據(jù)不會(huì)變化
- 還沒(méi)有人評(píng)論,歡迎說(shuō)說(shuō)您的想法!