<div id="app">
<ul>
<li v-for="bird in birds" :class="bird">{{bird}}</li>
</ul>
</div>
对应的HTML渲染:
v-for
属性的值是 js 的循环表达式,默认对数组进行循环时,会遍历所有的元素并复制当前html元素对其应用。
获取下标
如果想得到元素在数组的下标,需要增加一个循环变量:
<li v-for="(bird, index) in birds" :class="bird">
{{bird}} + {{index}}
</li>
对象属性遍历
如果数组元素是一个对象,而我们要循环输出对象的属性,则继续使用 v-for
不过此时想获取下标时,需要在前面设定所有对象的属性后再加上下标:
<li v-for="person in people">
<div v-for="(key, value, index) in person">
{{key}}:{{value}} - Index: {{index}}
</div>
</li>
用key进行索引追踪
当数据经过一些复杂的修改,被添加或删除到其他地方时,Vue 可能会只更新必要的值而放弃其他我们也想让它更新的值。因此我们需要用 key
属性来绑定数据,其值必须是在遍历中唯一确定的值。
如按下按钮后会将第一个元素放到第最后一个位置上,此时输入框中的内容并不会一起过去,也就是说Vue仅仅只更新html中的值,而非直接删去元素再次更新。
<div id="app">
<button type="button" class="move" @click="move">
Move to Bottom
</button>
<div class="card" v-for="person in people">
<h3>{{person.name}}</h3>
<p>{{person.message}}</p>
<input type="text" />
</div>
</div>
因此可以加上 key 来绑定到唯一标识符,此时所有内容都会随着其变化而更换位置。
<div id="app">
<button type="button" class="move" @click="move">
Move to Bottom
</button>
<div class="card" v-for="person in people" :key="person">
<h3>{{person.name}}</h3>
<p>{{person.message}}</p>
<input type="text" />
</div>
</div>