v-for
把一个数组对应为一组元素咱们能够用 v-for
指令基于一个数组来渲染一个列表。v-for
指令须要使用 item in items
形式的特殊语法,其中 items
是源数据数组,而 item
则是被迭代的数组元素的别名。html
<ul id="example-1"> <li v-for="item in items"> {{ item.message }} </li> </ul> var example1 = new Vue({ el: '#example-1', data: { items: [ { message: 'Foo' }, { message: 'Bar' } ] } })
在 v-for
块中,咱们能够访问全部父做用域的属性。v-for
还支持一个可选的第二个参数,即当前项的索引。vue
<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' } ] } })
你也能够用 of
替代 in
做为分隔符,由于它更接近 JavaScript 迭代器的语法:数组
<div v-for="item of items"></div>
v-for
里使用对象你也能够用 v-for
来遍历一个对象的属性。ide
<ul id="v-for-object" class="demo"> <li v-for="value in object"> {{ value }} </li> </ul> new Vue({ el: '#v-for-object', data: { object: { title: 'How to do lists in Vue', author: 'Jane Doe', publishedAt: '2016-04-10' } } })
你也能够提供第二个的参数为 property 名称 (也就是键名):ui
<div v-for="(value, name) in object"> {{ name }}: {{ value }} </div>
还能够用第三个参数做为索引:spa
<div v-for="(value, name, index) in object"> {{ index }}. {{ name }}: {{ value }} </div>
在遍历对象时,会按 Object.keys()
的结果遍历,可是不能保证它的结果在不一样的 JavaScript 引擎下都一致。code
v-for
里使用值范围v-for
也能够接受整数。在这种状况下,它会把模板重复对应次数。component
<div> <span v-for="n in 10">{{ n }} </span> </div>
结果: 1 2 3 4 5 6 7 8 9 10htm
<template>
上使用 v-for
相似于 v-if
,你也能够利用带有 v-for
的 <template>
来循环渲染一段包含多个元素的内容。好比:对象
<ul> <template v-for="item in items"> <li>{{ item.msg }}</li> <li class="divider" role="presentation"></li> </template> </ul>
v-for
与 v-if
一同使用当它们处于同一节点,v-for
的优先级比 v-if
更高,这意味着 v-if
将分别重复运行于每一个 v-for
循环中。当你只想为部分项渲染节点时,这种优先级的机制会十分有用,以下:
<li v-for="todo in todos" v-if="!todo.isComplete"> {{ todo }} </li>
上面的代码将只渲染未完成的 todo。
而若是你的目的是有条件地跳过循环的执行,那么能够将 v-if
置于外层元素 (或 <template>
)上。如:
<ul v-if="todos.length"> <li v-for="todo in todos"> {{ todo }} </li> </ul> <p v-else>No todos left!</p>
此处的v-for和v-if的配合使用,有点相似于筛选,用v-if来筛选出不须要渲染的部分
v-for
在自定义组件上,你能够像在任何普通元素上同样使用 v-for
。
<my-component v-for="item in items" :key="item.id"></my-component>
2.2.0+ 的版本里,当在组件上使用 v-for
时,key
如今是必须的。
然而,任何数据都不会被自动传递到组件里,由于组件有本身独立的做用域。为了把迭代数据传递到组件里,咱们要使用 prop:
<my-component v-for="(item, index) in items" v-bind:item="item" v-bind:index="index" v-bind:key="item.id" ></my-component>
不自动将 item
注入到组件里的缘由是,这会使得组件与 v-for
的运做紧密耦合。明确组件数据的来源可以使组件在其余场合重复使用。