【发布时间】:2017-09-30 17:24:44
【问题描述】:
当新对象添加到 Vue.js 组件中的对象数组时,渲染列表将更新,但是,oderBy 过滤器不会应用于添加的新项目。例如,一个对象数组,其中每个对象都有一个属性name,并且orderBy 过滤器应用于name,如果我将一个新对象推送到数组,这个对象将显示为最后一项渲染列表。使用unshift 时,对象将显示为列表的第一项。
如何正确地将项目添加到数组中,以便 Vue.js 可以将 orderBy 过滤器应用于所有项目重新呈现列表?
我尝试与Vue.set / $set 一起玩,但无法成功。
任何帮助表示赞赏。
HTML:
<div v-for="object in array | orderBy 'name'">
{{ object.name }}
</div>
JS:
data: function() {
return {
array: [
{
name: 'Jon'
},
{
name: 'Alex'
}
]
},
},
methods: {
addItemToArray() {
let item = { name: 'Paul' }
this.array.push(item)
}
}
【问题讨论】:
-
在 Vue 2.x 中,这种行为已被弃用,您应该使用
computed property来存储过滤后的数组,并循环遍历此计算属性。Filters旨在改变数据的呈现方式,而不是改变数据本身。此外,插值中|之后使用的过滤器在 Vue 实例内的filters对象下声明。 -
@wostex 谢谢。
标签: javascript arrays vue.js