我们用 v-for指令根据一组数组的选项列表进行渲染。v-for 指令需要使用item in items形式的特殊语法,items 是源数据数组并且item 是数组元素迭代的别名。
在 v-for 块中,我们拥有对父作用域属性的完全访问权限。v-for 还支持一个可选的第二个参数 index为当前项的索引。
<div id="app">
<ul>
<li v-for="(item, index) in items">
{{parentMessage}} - {{index}} - {{item.message}}
</li>
</ul>
</div>
<script>
var app = new Vue({
el: '#app',
data: {
parentMessage: 'parent',
items: [
{message: 'Foo'},
{message: 'Bar'}
]
}
})
</script>
可以用of代替in作为分割符,因为它是最接近javascript迭代器的语法:
<li v-for="item of items">
{{item.message}}
</li>
2.为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性。理想的 key 值是每项都有的唯一 id。它的工作方式类似于一个属性,所以你需要用 v-bind 来绑定动态值 (在这里使用简写):
<div v-for="item in items" :key="item.id">
<!-- 内容 -->
</div>
数组更新检测
变异方法
vue包含一组观察数组的变异方法,所以它们也将会触发视图更新。这些方法如下:
push() //可向数组的末尾添加一个或多个元素,并返回新的长度
pop() // 要删除并返回数组的最后一个元素
shift() // 用于把数组的第一个元素从其中删除
unshift() // 可向数组的开头添加一个或更多元素,并返回新的长度
splice() // 向/从数组中添加/删除项目,然后返回被删除的项目
sort() // 对数组元素进行排序
reverse() // 用于颠倒数组中元素的顺序
打开控制台,用前面的例子的items数组调用变异方法
替换数组
变异方法 (mutation method),顾名思义,会改变被这些方法调用的原始数组。相比之下,也有非变异 (non-mutating method) 方法,例如:filter(), concat() 和 slice() 。这些不会改变原始数组,但总是返回一个新数组。当使用非变异方法时,可以用新数组替换旧数组:
example1.items = example1.items.filter(function (item) {
return item.message.match(/Foo/)
})
注意事项
由于 JavaScript 的限制,Vue 不能检测以下变动的数组:
1、当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] = newValue
2、当你修改数组的长度时,例如:vm.items.length = newLength
解决这个问题
解决第一类问题: 可以使用vm.$set 实例方法,该方法是全局方法 Vue.set 的一个别名
vm.$set(vm.items, indexOfItem, newValue)
解决第二类 问题:可以使用splice:
vm.items.splice(newLength)