title: Angular JS 1.4 $formatter only runs one time
body: <p>I have a directive that formats a datestring. It runs successfully on page load, but after that, any input change does not run the formatter.</p>
  
  <pre><code>appTracker.directive('dateText', function() {
  return {
      restrict: 'A',
      require: 'ngModel',
      link: function(scope, element, attrs, ctrl) {
          ctrl.$parsers.push(function(data) {
              //Cut out all characters that are not numbers
              var dateString = data.replace(/\D/g, '');
              if(dateString.length != 8) {
                  ctrl.$setValidity('dateText', false);
                  console.log(ctrl);
                  return dateString;
              }
              else if ( dateString.length == 8) {
                  //Take the MM/DD/YYYY format and flip it to YYYY-MM-DD so we can save it correctly
                  ctrl.$setValidity('dateText', true);
                  console.log(ctrl);
                  console.log(dateString);
                  return dateString.substr(4, 4) + '-' + dateString.substr(0,2) + '-' + dateString.substr(2,2);
              }
  
          });
  
          ctrl.$formatters.push(function(data){
              console.log('ran');
              if(data) {
                  var dateString = data.replace(/\D/g, '');
                  if(dateString.length &lt;= 2) {
                      var returnString = dateString;
                  }
                  else if (dateString.length &gt; 2 &amp;&amp; dateString.length &lt;= 4) {
                      var returnString = dateString.substr(0,2) + '/' + dateString.substr(2);
                  }
                  else if (dateString.length &gt; 4 &amp;&amp; dateString.length &lt; 8) {
                      var returnString = dateString.substr(0,2) + '/' + dateString.substr(2,2) + '/' + dateString.substr(4);
                  }
                  else if(dateString.length &gt;= 8 ) {
                      var returnString = dateString.substr(4,2) + '/' + dateString.substr(6,2) + '/' + dateString.substr(0,4);
                  }
                  return returnString;
              }
          });
      }
  };
  </code></pre>
  
  <p>});</p>
  
  <p>On load, the DB passes '1986-05-12' and the model is set successfully. The view shows '12/05/1986' as it should.</p>
  
  <p>However, when you try and update the input, the $formatter never runs again. It never logs 'ran', and the view always shows the raw input the user typed. However, the parser is running, and the model is successfully formatted to the YYYY-MM-DD format I'm looking for.</p>
  
  <p>Shouldn't the formatter run also whenever input is entered? What am I doing wrong here?</p>