在日常开发中,避免不了迭代渲染一个列表,如:下拉列表、表格等。Vue.js 中,为了渲染列表专门提供了 v-for 指令。
我们可以用 v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名。例如:
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue</title>
<!-- 使用 CDN 引入 Vue 库 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in items" :key="item.message">
{{ item.message }}
</li>
</ul>
</div>
<script type="text/javascript">
var app = new Vue({
el: "#app",
data: {
items: [
{ message: 'Foo' },
{ message: 'Bar' }
]
}
});
</script>
</body>
</html>效果如下图:

在 v-for 块中,我们可以访问所有父作用域的属性。v-for 还支持一个可选的第二个参数,即当前项的索引。例如:
<div id="app">
<ul>
<!-- index 为索引,从 0 开始 -->
<li v-for="(item,index) in items" :key="item.message">
{{ prefix }} - {{ index }} - {{ item.message }}
</li>
</ul>
</div>
<script type="text/javascript">
var app = new Vue({
el: "#app",
data: {
prefix: "[v-for]",
items: [
{ message: 'Foo' },
{ message: 'Bar' }
]
}
});
</script>渲染结果:
<div id="app"> <ul> <li>[v-for] - 0 - Foo</li> <li>[v-for] - 1 - Bar</li> </ul> </div>
你也可以用 of 替代 in 作为分隔符,因为它更接近 JavaScript 迭代器的语法,例如:
<div id="app">
<ul>
<!-- index 为索引,从 0 开始 -->
<li v-for="(item,index) of items" :key="item.message">
{{ prefix }} - {{ index }} - {{ item.message }}
</li>
</ul>
</div>v-for 也可以接受整数。在这种情况下,它会把模板重复对应次数。例如:
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue</title>
<!-- 使用 CDN 引入 Vue 库 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<span v-for="n in 10">{{ n }} </span>
</div>
<script type="text/javascript">
var app = new Vue({
el: "#app"
});
</script>
</body>
</html>运行效果图:
