title: Is there a way in AngularJS to react on model changes without using $watch?
body: <p>I'm implementing a simple spinner control in AngularJS and I want to react both on user input and changes from +/- buttons. Here is my <strong>HTML</strong>:</p>
  
  <pre><code>&lt;input type='button' ng-click="MyProperty = MyProperty - 1" value="-"&gt;
  &lt;input type='text' ng-model="MyProperty" ng-change="log('changed from ngChange')"&gt;
  &lt;input type='button' ng-click="MyProperty = MyProperty + 1" value="+"&gt;
  </code></pre>
  
  <p>But this will track only 'user-changes' far as <code>ngChange</code> supports only user-interaction updates as per <a href="https://docs.angularjs.org/api/ng/directive/ngChange">documentaiton</a></p>
  
  <p>So now I'm  looking at <code>$scope.$watch</code> as Frederik <a href="http://fdietz.github.io/recipes-with-angular-js/controllers/responding-to-scope-changes.html">recommends</a>:</p>
  
  <pre><code>$scope.$watch('MyProperty', function() {
    $scope.log('changed from $watch');
  });
  </code></pre>
  
  <p>See <strong><a href="http://plnkr.co/edit/hoyc5B">plunker demo</a></strong></p>
  
  <p>But this doesn't seem right enogh.</p>
  
  <ol>
  <li>First it's not declarative and you have to search the code for <code>MyTestProperty</code> to find this binding.</li>
  <li>If you want would like to place <code>$scope.log</code> in a separate Model you have to either inject <code>$scope</code> or to do the binding in controller. And as far as I understand both ways are not considered to be the best practicies.</li>
  </ol>
  
  <p><a href="http://www.benlesh.com/2013/10/title.html">Some people</a> think that <code>$watch</code> is a bad thing in general for a number of other reasons. But the solution advised there (which would be calling <code>log</code> in ngClick directly) doesn't make too much diference to me. Basicly you have to manually track all the changes and if new actor comes you have to copy your logic there.</p>
  
  <p>So <strong>the questions would be</strong>: is there a way that allows you to automaticly keep track of model updates without $watch? And how bad is the idea to implement your own derective for this if there is now such way?</p>