$render stopped working at angular 1.2.2 (file validation directive)
angularjs, angularjs-directive, javascript
Solution
Increase the priority of your directive to something above 0.
For example:
myApp.directive('validFile', function ($filter) {
return {
priority: 10,
Here's a detailed explanation of the problem that I found associated with this ui-tinymce issue that's, at it's root, the same as yours.
The short version of the explanation being that this change causes `input`'s `$render` to take precedence over your own. By bumping the priority of your directive you, in effect, give your `$render` priority- as it was before that change in 1.2 rc3.
Problem
I have migrated from angular 1.0.8 to angular 1.2.2 yesterday, and beside a bunch of other things that got broken and I've already fixed, the $render function on the following directive is not firing anymore. Did anyone encouter such a behavior before?0 ``` directive('validFile', function (utils, $filter) { return { require: 'ngModel', link: function (scope, el, attrs, ngModel) { if(utils.isMobileAgent()) return; var form = el.parents().find('form'); ngModel.$render = function () { debugger; if(form.hasClass('ng-pristine')) return; if(el.val() && el.val().length > 0){ ngModel.$setViewValue(el.val()); } if(el.hasClass('ng-invalid')){ el.parent().addClass('ng-invalid').addClass('ng-invalid-required'); ngModel.$setValidity(attrs.name, false); ngModel.$setPristine(attrs.name, false); scope.fileMsg = $filter('translate')('PLEASESELECT') + ' ' + $filter('translate')(attrs.name); // scope.layout.showFileError = true; } else{ el.parent().removeClass('ng-invalid').removeClass('ng-invalid-required').addClass('ng-valid'); ngModel.$setValidity(attrs.name, true); } }; el.bind('mouseover', function(){ if(form.hasClass('ng-dirty') && el.parent().hasClass('ng-invalid')) el.removeClass('ng-pristine'); }); el.bind('mouseleave', function(){ if(el.val() && el.val().length > 0){ el.addClass('ng-pristine'); } }) el.bind('change', function () { scope.$apply(function () { ngModel.$render(); }); }); form.bind('change', function () { scope.$apply(function () { ngModel.$render(); }); }); } }; }); ``` markup: ``` <input type="file" data-ng-model='model.formData.resume' name="resume" data-valid-file data-my-validate data-value-required="true"> ```