{ } { changed: true } No idea it changed Solutions? var model = new Model(); model.set('foo', 'bar'); model.get('foo'); Dirty checking — a.k.a. $scope.$digest( ) — “Angular models are plain old JavaScript objects. This makes your code easy to test, maintain, reuse, and again free from boilerplate.” var o = {}; Object.observe(o, function(changes) { console.log(changes); }); // Add a property o.foo