一般形式
使用 v-for 来遍历一个数组或者对象以渲染一个列表。
形式: item in items
解释: item - 元素的别名 items - 数组/对象
其中,Vuejs 还给我们提供了一个特殊变量 $index,为当前数组元素的索引
|
也可以为索引指定一个别名:
Addition: 1.0.17 开始可以使用 v-for=”item of items”
模版 template v-for
结合 template 标签作为包裹块,可以实现渲染一个包含多个元素的模版:
数组变动检测
变异方法
所谓“变异方法”(名称来自 Vue.js 的中文 API),就是调用一些属性方法后,原始的数组会产生变化。
Vue.js 对被观察数组的这些变异方法进行了加工,使用这些方法时可以触发视图的更新,包括:
- push()
- pop()
- shift()
- unshift()
- splice()
- sort()
- reverse()
( sort 在 Chrome 不会触发更新,火狐可以)
替换数组
使用新数组替换旧数组时,也可以触发视图的更新。
Vue.js 内部实现了一些启发算法,最大化地复用 DOM 元素,因此不必担心替换数组会因为重新渲染 DOM 而带来的性能问题。
(列表性能优化原理,http://gold.xitu.io/entry/5776187cd342d30058d50fd2)
因此,在使用一些不会修改原始数组的方法时,可以直接用获得的新数组来替换旧数组。
track by
绑定一个作为唯一 ID 的属性,从而可以使 Vue.js 尽可能地复用已有实例。
track by $index
问题
“因为 JavaScript 的限制,Vue.js 不能检测到下面数组变化:”(WHY?- -)
- 直接用索引设置元素, 如: vm.items[0] = {};
- 修改数据的长度, 如: vm.items.length = 0;
To solve Q1,可以使用 Vue.js 数组的 $set() 方法:
example.items.$set( key, data )
key - 键值或者索引
data - 要赋予其的数据
To solve Q2,只需要直接用一个空数组来替换 items
对象 v-for
遍历对象时,除了可以访问到 $index,也可以访问到 $key
值域 v-for
v-for 接收一个正整数,可以输出范围内的所有整数
过滤/排序
方法:
创建一个计算属性,返回过滤/排序过的数组
使用内置的过滤器 filterBy 和 orderBy