我需要更新我的VueJS组件中的一些Array数据,该组件通过v-for
呈现为模板中的列表。
当我更新整个数组时,我看到DOM中的列表更新。但是,如果我只更新索引,则列表不会更新。
以下是两个相关方法:
methods: {
loadOnlyOneIndex: function() {
this.data[0] = {
title: 'Hello error',
slug: 'hello',
desc: 'will not work'
};
},
loadEverything: function() {
this.data = [{
title: 'Hello new title',
slug: 'hello',
desc: 'this will work'
}, {
title: 'Hello new title 2 !',
slug: 'hello2',
desc: 'really work'
}];
}
}
答案 0 :(得分:1)
由于JavaScript的限制,Vue无法检测到对数组的以下更改:
直接设置带索引的项目时,例如
vm.items[indexOfItem] = newValue
- 醇>
修改数组的长度时,例如
vm.items.length = newLength
要让Vue对数组索引的更改作出反应,请使用Vue.set()
method。
在您的情况下,您应该在Vue.set(this.data, 0, newValue)
方法中使用loadOnlyOneIndex
。
每个Vue实例还通过Vue.set
具有vm.$set
方法的别名(其中vm
是Vue实例)。
因此,您还可以在this.$set(this.data, 0, newValue)
方法中使用loadOnlyOneIndex
。
这在使用Single File Components或您没有直接引用Vue
对象的任何地方时很有用。