Vue.set
используется как обходной путь для факта, что Vue не обнаруживает, когда свойство добавлено к объекту.Итак, похоже, у вас правильная идея: что свойство newData
изначально не существует в объекте this.data.key1
, и вам нужно будет использовать Vue.set
, чтобы добавить свойство и сделать его реактивным.
В вашем коде Vue.set(this.data, 'key1', ch)
говорит, установите свойство key1
для this.data
в ch
и сделайте его реактивным, чтобы Vue мог отслеживать его.Однако, поскольку значение ch
- это просто объект this.data.key1
с новым свойством newData
, Vue все еще не знает, что это свойство добавляется к объекту.
То, что вы хотите сделать, этоустановите значение свойства newData
на this.data.key1
, поэтому вам нужно сделать это следующим образом:
Vue.set(this.data.key1, 'newData', 'text');
Вот рабочий пример:
new Vue({
el: '#app',
data() {
return {
data: {
'key1': {
value: true
},
'key2': {
value: false
}
}
}
},
mounted() {
setTimeout(() => {
Vue.set(this.data.key1, 'newData', 'text')
}, 3000);
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>
<div id="app">
<div v-for="(value, key) in data">
{{value.value}} {{value.newData}}
</div>
</div>