Atousa Darabi
Atousa Darabi

Reputation: 927

How reload Object property changes in DOM element in vue?

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

Answers (1)

slauth
slauth

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

Related Questions