Vue

by nerdycap007

HTML

<div id="app">
  {{ foo.bar }}
</div>

CSS

body {
  background: #20262E;
  padding: 20px;
  font-family: Helvetica;
}

#app {
  background: #fff;
  border-radius: 4px;
  padding: 20px;
  transition: all 0.2s;
}

li {
  margin: 8px 0;
}

h2 {
  font-weight: bold;
  margin-bottom: 15px;
}

del {
  color: rgba(0, 0, 0, 0.3);
}

Vue

new Vue({
  el: "#app",
  
  data: {
  	foo: {
    	bar: 'bar'
    }
  },
  
  created () {
  	let unwatch = this.$watch('foo.bar', 
    	function (val, oldVal) {
    		if (typeof val === 'undefined') { 
          console.log('unwatch foo.bar');
          return unwatch();
        }
        
      	console.log(val)
    	},
      {
      	immediate: true
      }
    )
  },
  
  mounted () {
    setTimeout(() => {
    	this.foo.bar = 'baz'
    }, 2000);
    
    setTimeout(() => {
    	Vue.delete(this.foo, 'bar')
    }, 4000);
    
    setTimeout(() => {
    	this.foo.bar = 'foo'
    }, 6000);
  }
  
})