$observe not firing on changes and not interpolating
<p>TLDR: Why does angular's ngMinlength receive $observe updates with interpolated values, but my custom validation directive does not?</p>

<p><a href="http://plnkr.co/edit/dy8Ezf?p=preview" rel="nofollow">Link to plnkr</a></p>

<p>I am working on a custom validation directive in Angular 1.3 and have noticed something that seems inconsistent.  The directive in angular seems to get interpolated updates from attr.$observe, but the directive I create does not behave the same way.</p>

<p>I can use $watch to fix it, or bind an interpolated value, but is inconsistent with the existing validation directives.  What's the difference, and how can I make my custom directive work similarly to the built in validation directives?</p>

<p>Angular's directive</p>

<pre><code>var minlengthDirective = function() {
        return {
          restrict: 'A',
          require: '?ngModel',
          link: function(scope, elm, attr, ctrl) {
            if (!ctrl) return;

            var minlength = 0;
            attr.$observe('minlength', function(value) {
              minlength = int(value) || 0;
              ctrl.$validate();
            });
            ctrl.$validators.minlength = function(modelValue, viewValue) {
              return ctrl.$isEmpty(viewValue) || viewValue.length &gt;= minlength;
            };
          }
        };
      };
</code></pre>

<p>My directive</p>

<pre><code>function observeMinLength($log){
  return {
      restrict: 'A',
      require: '?ngModel',
      link: function (scope, elm, attr, ctrl) {
          if (!ctrl) return;

          var min;

          //Problem 1: observered value is not interpolated
          //Problem 2: observe  is only fired one time
          attr.$observe('observeMinlength', function (value) {
              $log.debug('observed value: ' + value);
              min = parseInt(value, 10) || 0;
              ctrl.$validate();
          });

          ctrl.$validators.mymin = function (modelValue, viewValue) {
            var len = 0;
            if (viewValue){
              len = viewValue.length;
            }
            return ctrl.$isEmpty(viewValue) || viewValue.length &gt;= min;
          };
      }
  };
}
</code></pre>