Har*_*San 2 javascript object-properties vue.js vue-component vue-reactivity
在 Vue.js 中,我有一个数据对象,它具有动态添加/编辑的属性,这些属性本身就是数组。例如,该属性的开头如下:
data: function () {
return {
vals: {}
};
}
Run Code Online (Sandbox Code Playgroud)
随着时间的推移,通过各种按钮点击等,vals可能如下所示(实际属性名称和值基于多种因素 100% 动态):
vals: {
set1: [
{
prop1: 123,
prop2: 'hello'
},
{
prop1: 456,
prop2: 'bye'
}
],
set2: [
{
prop3: 'Why?!',
prop4: false
}
]
}
Run Code Online (Sandbox Code Playgroud)
当数组属性(即set1和set2)发生更改时,我希望能够对这些更改做出反应。
例如,我可能会在代码中执行以下操作:
var prop = 'set1';
this.vals[prop].push({
{
prop1: 789,
prop2: 'hmmm...'
}
});
Run Code Online (Sandbox Code Playgroud)
然而,当我这样做时,组件没有更新(我猜是因为我将一个对象推到对象子数组的末尾;而 Vue.js 似乎没有跟踪这些更改)。
我已经能够通过执行this.$forceUpdate();上述操作来强制组件做出反应push,但我想当涉及到被推到对象子数组末尾的对象时,必须有一种更雄辩的方式让 Vue.js 做出反应。
有谁知道更好的方法来尝试实现我想要实现的目标?谢谢。
每当您向对象添加新属性或更改数组中的值时,都需要使用Vue.set().
Vue.set(this.vals, prop, [ /* ... */ ])
Run Code Online (Sandbox Code Playgroud)
理想情况下,您应该预先定义所有属性,这样 Vue 就不必根据数据模型的形状使计算属性无效。即使您将它们设置为null您也应该尝试映射出您期望组件需要的所有属性。
此外,在您的第一个代码块中,您后面有一个冒号return:,它将计算为标签,这意味着您的数据函数不会返回任何内容。
| 归档时间: |
|
| 查看次数: |
3856 次 |
| 最近记录: |