列表渲染
列表功能是个相当重要的功能,经常会用到,一定要弄懂。
主要指令
- v-for
- :key(好像不用这个属性值也行,直接用“(item,aaa) in items”,这个“aaa”就能当做索引……)
采用:item in items的形式访问,item表示当前项,items表示数据源。
:key是一个标签的属性,key的值作为Vue遍历出来的标签的区分符。例如:如果遍历的是数组,而且key的值是index,那么遍历出来的每个标签的标记就是各个标签的index值。(好像没说清楚,可以再看看文档,在“列表渲染”这个条目下面。)
说明:
下面代码的“li”标签中item后面加了一个“aaa”的值,这个“aaa”表示遍历过程中的下标值,直接取这个“aaa”的值就可以得到遍历出来的标签的下标。
可能遍历对象的时候会用到:key值吧,因为对象的属性没有下标,只有属性名称,所以可以用item.id的形式获得唯一标识。
<!doctype html>
<html lang="zh-ch">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0,
maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>条件渲染</title>
<script src="../js/vue.js"></script>
</head>
<body>
<div id="demo">
<h2>遍历数组</h2>
<ul>
<li v-for="(item,aaa) in items" :key="aaa">
<p><b>{{item.msg}}</b><button @click="deleteItem(aaa)">攻击</button></p>
</li>
</ul>
</div>
<script type="text/javascript">
new Vue({
el:'#demo',
data:{
items:[
{msg:'空军一号'},
{msg:'空军二号'}
]
},
methods:{
deleteItem(index){
this.items.splice(index,1,{msg:'已被击毁'});
}
}
});
</script>
</body>
</html>
注意:
- in 可以用 of 来代替,即“item of items”。
- v-for块可以直接访问父作用域的属性,如下,parentMessage是与items平级的属性,在v-for块中可以直接用双括号访问。
<ul id="example-2">
<li v-for="(item, index) in items">
{{ parentMessage }} - {{ index }} - {{ item.message }}
</li>
</ul>
var example2 = new Vue({
el: '#example-2',
data: {
parentMessage: 'Parent',
items: [
{ message: 'Foo' },
{ message: 'Bar' }
]
}
})