В Vue.js у меня есть объект данных с динамически добавляемыми / редактируемыми свойствами, которые сами по себе являются массивами. Например, свойство начинается следующим образом:
data: function () {
return {
vals: {}
};
}
И со временем, при нажатии различных кнопок и т. Д., vals
может выглядеть следующим образом (при этом фактические имена и значения свойств являются 100% -ными динамическими в зависимости от ряда факторов):
vals: {
set1: [
{
prop1: 123,
prop2: 'hello'
},
{
prop1: 456,
prop2: 'bye'
}
],
set2: [
{
prop3: 'Why?!',
prop4: false
}
]
}
При изменении свойств массива (т.е. set1
и set2
) я хочу иметь возможность реагировать на эти изменения.
Например, я могу сделать в своем коде что-то вроде следующего:
var prop = 'set1';
this.vals[prop].push({
{
prop1: 789,
prop2: 'hmmm...'
}
});
Однако, когда я это делаю, компонент не обновляется (я предполагаю, потому что я помещаю объект в конец подмассива объекта; и Vue.js, похоже, не отслеживает эти изменения).
Мне удалось заставить компонент быть реактивным, выполнив this.$forceUpdate();
после вышеуказанного push
, но я полагаю, что должен быть более красноречивый способ заставить Vue.js реагировать, когда дело доходит до объектов, помещаемых в конец объекта. подмассивы.
Кто-нибудь знает, как лучше попытаться сделать то, чего я пытаюсь достичь? Спасибо.