Vue.js学习教程之列表渲染详解
本文主要给大家介绍了关于Vue.js列表渲染的相关资料,分享出来给大家参考学习,下面来看看详细的介绍:
v-for
可以使用v-for指令基于一个数组渲染一个列表。这个指令使用特殊的语法,形式为iteminitems,items是数据数组,item是当前数组元素的别名:
示例:
{{item.message}}
varexample1=newVue({ el:'#example-1', data:{ items:[ {message:'Foo'}, {message:'Bar'} ] } })
在v-for块内我们能完全访问父组件作用域内的属性,另有一个特殊变量$index,正如你猜到的,它是当前数组元素的索引:
{{parentMessage}}-{{$index}}-{{item.message}}
varexample2=newVue({ el:'#example-2', data:{ parentMessage:'Parent', items:[ {message:'Foo'}, {message:'Bar'} ] } })
另外,你可以为索引指定一个别名(如果v-for用于一个对象,则可以为对象的键指定一个别名):
{{index}}{{item.message}}
从1.0.17开始可以使用of分隔符,更接近JavaScript遍历器语法:
templatev-for
类似于templatev-if,也可以将v-for用在标签上,以渲染一个包含多个元素的块。例如:
- {{item.msg}}
数组变动检测
变异方法
Vue.js包装了被观察数组的变异方法,故它们能触发视图更新。
被包装的方法有:
- push()
- pop()
- shift()
- unshift()
- splice()
- sort()
- reverse()
你可以打开浏览器的控制台,用这些方法修改上例的items数组。例如:example1.items.push({message:'Baz'})。
替换数组
变异方法,如名字所示,修改了原始数组。相比之下,也有非变异方法,如filter(),concat()和slice(),不会修改原始数组而是返回一个新数组。在使用非变异方法时,可以直接用新数组替换旧数组:
example1.items=example1.items.filter(function(item){ returnitem.message.match(/Foo/) })
可能你觉得这将导致Vue.js弃用已有DOM并重新渲染整个列表——幸运的是并非如此。Vue.js实现了一些启发算法,以最大化复用DOM元素,因而用另一个数组替换数组是一个非常高效的操作。
track-by
有时需要用全新对象(例如通过API调用创建的对象)替换数组。因为v-for默认通过数据对象的特征来决定对已有作用域和DOM元素的复用程度,这可能导致重新渲染整个列表。但是,如果每个对象都有一个唯一ID的属性,便可以使用track-by特性给Vue.js一个提示,Vue.js因而能尽可能地复用已有实例。
例如,假定数据为:
{ items:[ {_uid:'88f869d',...}, {_uid:'7496c10',...} ] }
然后可以这样给出提示: