title: deep watch attribute passed to a directive
body: <p>I have a directive to which I am passing an object that is dynamically built :</p>
  
  <pre><code>&lt;my-directive passed-value="ctrl.buildValue()"&gt;&lt;/my-directive&gt;
  
  angular
  .module('myModule')
  .directive('myDirective', function () {
      return {
          restrict: 'E',
          scope: {
              passedValue: '='
          },
          controllerAs: 'ctrl',
          bindToController: true,
          templateUrl: 'templates/my-directive.html',
          controller: function () {
              var that = this;
          }
      };
  }]);
  </code></pre>
  
  <p>Suppose the object is always a new object but the object properties never change, for example :</p>
  
  <pre><code>myController.buildValue = function() {
      return {someValue: 'abcd'}
  };
  </code></pre>
  
  <p><strong>Then angular enters into an infinite loop, because (I think) the object returned is always a new object.</strong></p>
  
  <p><strong>So how can I ask angular to consider the object as not having changed if its properties are the same, even if the object is new ?</strong></p>
  
  <p>It should be possible, because I know that when I deep watch an object (using <code>$watch(..., true)</code>), angular considers that the object is the same if its properties are the same, even if the object is always a new one.</p>