•
加上v-bind:key="item.id"来确保排序时不是只换属性而是调换元素
•
<span v-for="n in 10">{{ n }} </span>
•
按顺序不是按名字
•
<li v-for="(item, index) in items">
•
<li v-for="(value, name, index) in myObject">
•
v-for 和 component 结合
<my-component
v-for="(item, index) in items"
:item="item"
:index="index"
:key="item.id">
</my-component>
遍历数组
<ul id="example-1">
<li v-for="item in items">
{{ item.message }}
</li>
</ul>
<ul id="example-2">
<li v-for="(item, index) in items">
{{ parentMessage }} - {{ index }} - {{ item.message }}
</li>
</ul>
var testFor= new Vue({
el: '#example-2',
data: {
parentMessage: 'Parent',
items: [
{ message: 'Foo' },
{ message: 'Bar' }
]
}
})
结果:
•
Parent - 0 - Foo
•
Parent - 1 - Bar
操作
Vue 只侦听数组的下面这些方法
•
push()
testFor.items.push({id:6,content:'123'})
•
pop()
•
shift()
删除并返回数组的第一个元素
•
unshift()
向数组的开头添加一个或更多元素,并返回新的长度。
•
splice()
删除或者替换,会返回被替换或删除的元素
•
testFor.items.splice(0,1,) 删除第一个
•
testFor.items.splice(0,2,) 删除第二个
•
testFor.items.splice(0,1,‘321’) 替换第一个为‘321’
•
testFor.items.splice(2) 只留下前两个
•
sort()
•
reverse()
•
slice() 从某个已有的数组返回选定的元素,不侦听这个,听了也没用
替换数组
变异方法,顾名思义,会改变调用了这些方法的原始数组。相比之下,也有非变异 (non-mutating method) 方法,例如 filter()、concat() 和 slice() 。它们不会改变原始数组,而总是返回一个新数组。当使用非变异方法时,可以用新数组替换旧数组:
example1.items = example1.items.filter(function (item) {
return item.message.match(/Foo/)
})
不侦听
1.
当你利用索引直接设置一个数组项时,例如:vm.items[indexOfItem] = newValue
testFor.items[0].content='11',当数组里是对象时就又侦听了。
可以用下面方法解决
// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
// Array.prototype.splice
vm.items.splice(indexOfItem, 1, newValue)
2.
当你修改数组的长度时,例如:vm.items.length = newLength
遍历对象
<ul id="v-for-object" class="demo">
<li v-for="value in object">
{{ value }}
</li>
</ul>
new Vue({
el: '#v-for-object',
data: {
object: {
title: 'How to do lists in Vue',
author: 'Jane Doe',
publishedAt: '2016-04-10'
}
}
})
结果:
•
How to do lists in Vue
•
Jane Doe
•
2016-04-10
你也可以提供第二个的参数为 property 名称 (也就是键名):
<div v-for="(value, name) in object">
{{ name }}: {{ value }}
</div>
title: How to do lists in Vue
author: Jane Doe
publishedAt: 2016-04-10
还可以用第三个参数作为索引:
<div v-for="(value, name, index) in object">
{{ index }}. {{ name }}: {{ value }}
</div>
0. title: How to do lists in Vue
1. author: Jane Doe
2. publishedAt: 2016-04-10
对象变更检测注意事项
还是由于 JavaScript 的限制,Vue 不能检测对象属性的添加或删除:
var vm = new Vue({
data: {
a: 1
}
})
// `vm.a` 现在是响应式的
vm.b = 2
// `vm.b` 不是响应式的
对于已经创建的实例,Vue 不允许动态添加根级别的响应式属性。但是,可以使用 Vue.set(object, propertyName, value) 方法向嵌套对象添加响应式属性。
你还可以使用 vm.$set 实例方法,它只是全局 Vue.set 的别名:
vm.$set(vm.userProfile, 'age', 27)
有时你可能需要为已有对象赋值多个新属性,比如使用 Object.assign() 或 _.extend()。在这种情况下,你应该用两个对象的属性创建一个新的对象。所以,如果你想添加新的响应式属性,不要像这样:
Object.assign(vm.userProfile, {
age: 27,
favoriteColor: 'Vue Green'
})
你应该这样做:
vm.userProfile = Object.assign({}, vm.userProfile, {
age: 27,
favoriteColor: 'Vue Green'
})
在 v-for 里使用值范围
v-for 也可以接受整数。在这种情况下,它会把模板重复对应次数。
<div>
<span v-for="n in 10">{{ n }} </span>
</div>
结果:
1 2 3 4 5 6 7 8 9 10
评论区