$ render停止工作在角度1.2.2(文件验证指令)

Ole*_*sov 6 javascript angularjs angularjs-directive

我已经从角度1.0.8迁移到了昨天的角度1.2.2,除了一堆其他被破坏的东西,我已经修复了,以下指令中的$ render函数不再触发.

有没有人在这之前唠叨这种行为?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();
            });
        });
    }
};
});
Run Code Online (Sandbox Code Playgroud)

标记:

<input type="file" data-ng-model='model.formData.resume' name="resume" data-valid-file data-my-validate data-value-required="true">
Run Code Online (Sandbox Code Playgroud)

Kay*_*ave 5

将指令的优先级提高到0以上.

例如:

myApp.directive('validFile', function ($filter) {
   return {
     priority: 10,
Run Code Online (Sandbox Code Playgroud)

以下是我发现的与这个问题相关的问题详细解释,从根本上说,它与你的问题相同.

该解释的短版是是这种变化的原因input$render优先于你自己的.通过提高指令的优先级,实际上,$render优先级 - 就像1.2 rc3中的更改之前一样.

  • 这让我疯了!谢谢你的回答.那个详细的解释是庞大的! (2认同)