这篇文章给大家分享的是有关Vue.js中列表如何渲染的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
站在用户的角度思考问题,与客户深入沟通,找到慈利网站设计与慈利网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计、
成都做网站 、企业官网、英文网站、手机端网站、网站推广、
域名注册 、网页空间、企业邮箱。业务覆盖慈利地区。
v-for
可以使用 v-for 指令基于一个数组渲染一个列表。这个指令使用特殊的语法,形式为item in items,items 是数据数组,item 是当前数组元素的别名:
示例:
var example1 = new Vue({
el: '#example-1',
data: {
items: [
{ message: 'Foo' },
{ message: 'Bar' }
]
}
}) 在 v-for 块内我们能完全访问父组件作用域内的属性,另有一个特殊变量 $index,正如你猜到的,它是当前数组元素的索引:
{{ parentMessage }} - {{ $index }} - {{ item.message }}
var example2 = new Vue({
el: '#example-2',
data: {
parentMessage: 'Parent',
items: [
{ message: 'Foo' },
{ message: 'Bar' }
]
}
}) 另外,你可以为索引指定一个别名(如果 v-for 用于一个对象,则可以为对象的键指定一个别名):
{{ index }} {{ item.message }}
从 1.0.17 开始可以使用 of 分隔符,更接近 JavaScript 遍历器语法:
template v-for
类似于 template v-if,也可以将 v-for 用在 标签上,以渲染一个包含多个元素的块。例如:
数组变动检测
变异方法
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) {
return item.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', ... }
]
} 然后可以这样给出提示:
然后在替换数组 items 时,如果 Vue.js 遇到一个包含_uid: '88f869d'
的新对象,它知道它可以复用这个已有对象的作用域与 DOM 元素。
track-by $index
如果没有唯一的键供追踪,可以使用track-by="$index"
,它强制让 v-for 进入原位更新模式:片断不会被移动,而是简单地以对应索引的新值刷新。这种模式也能处理数据数组中重复的值。
这让数据替换非常高效,但是也会付出一定的代价。因为这时 DOM 节点不再映射数组元素顺序的改变,不能同步临时状态(比如 元素的值)以及组件的私有状态。因此,如果 v-for 块包含 元素或子组件,要小心使用track-by="$index"
问题
因为 JavaScript 的限制,Vue.js 不能检测到下面数组变化:
1.直接用索引设置元素,如vm.items[0] = {};
2.修改数据的长度,如vm.items.length = 0
。
为了解决问题 (1),Vue.js 扩展了观察数组,为它添加了一个$set()
方法:
// 与 `example1.items[0] = ...` 相同,但是能触发视图更新
example1.items.$set(0, { childMsg: 'Changed!'}) 至于问题 (2),只需用一个空数组替换 items。
除了$set()
, Vue.js 也为观察数组添加了$remove()
方法,用于从目标数组中查找并删除元素,在内部它调用splice()
。因此,不必这样:
var index = this.items.indexOf(item)
if (index !== -1) {
this.items.splice(index, 1)
} 只用这样:
this.items.$remove(item) 对象 v-for
也可以使用 v-for 遍历对象。除了 $index 之外,作用域内还可以访问另外一个特殊变量 $key。
new Vue({
el: '#repeat-object',
data: {
object: {
FirstName: 'John',
LastName: 'Doe',
Age: 30
}
}
}) 也可以给对象的键提供一个别名:
{{ key }} {{ val }}
感谢各位的阅读!关于“Vue.js中列表如何渲染”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
文章标题:Vue.js中列表如何渲染-创新互联