Reputation: 927
I need to show the status of an object if it has a property or not. I add a property id
to object and console.log
shows it is true, But it is not updated in DOM element.
How can I see the status in DOM element?
var app = new Vue({
el: '#app',
data() {
return {
children: {}
}
},
methods: {
fillChildren() {
this.children['id'] = 'child1Id'
console.log(this.children.hasOwnProperty('id')) // This is true
}
}
})
<link type="text/css" rel="stylesheet" href="https://unpkg.com/[email protected]/dist/css/bootstrap.min.css" />
<link type="text/css" rel="stylesheet" href="https://unpkg.com/[email protected]/dist/bootstrap-vue.css" />
<script src="https://unpkg.com/[email protected]/dist/vue.min.js"></script>
<script src="https://unpkg.com/[email protected]/dist/bootstrap-vue.min.js"></script>
<div id="app">
<div @click="fillChildren">Fill children</div>
{{children.hasOwnProperty('id')}} <!-- I want to see true after click -->
</div>
Upvotes: 0
Views: 273
Reputation: 3178
From Reactivity in Depth:
Vue cannot detect property addition or deletion.
You can circumvent this limitation by using the vm.$set
instance method:
var app = new Vue({
el: '#app',
data() {
return {
children: {}
}
},
methods: {
fillChildren() {
this.$set(this.children, 'id', 'child1Id')
console.log(this.children.hasOwnProperty('id')) // This is true
}
}
})
<link type="text/css" rel="stylesheet" href="https://unpkg.com/[email protected]/dist/css/bootstrap.min.css" />
<link type="text/css" rel="stylesheet" href="https://unpkg.com/[email protected]/dist/bootstrap-vue.css" />
<script src="https://unpkg.com/[email protected]/dist/vue.min.js"></script>
<script src="https://unpkg.com/[email protected]/dist/bootstrap-vue.min.js"></script>
<div id="app">
<div @click="fillChildren">Fill children</div>
{{children.hasOwnProperty('id')}} <!-- I want to see true after click -->
</div>
Upvotes: 1