2013-11-28 13 views
6

Tôi đã di chuyển từ góc 1.0.8 sang góc 1.2.2 ngày hôm qua và bên cạnh một loạt các thứ khác bị hỏng và tôi đã sửa, Hàm render $ trên chỉ thị sau không bắn nữa.

Có ai encouter một hành vi như vậy trước 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(); 
      }); 
     }); 
    } 
}; 
}); 

đánh dấu:

<input type="file" data-ng-model='model.formData.resume' name="resume" data-valid-file data-my-validate data-value-required="true"> 

Trả lời

5

Tăng ưu tiên của chỉ thị của bạn để một cái gì đó trên 0.

Ví dụ:

myApp.directive('validFile', function ($filter) { 
    return { 
    priority: 10, 

Dưới đây là một số detailed explanation of the problem mà tôi đã tìm thấy được liên kết với số this ui-tinymce issue, tại gốc của nó, giống như thư mục gốc của bạn.

Phiên bản ngắn của giải thích là this change gây ra input 's $render để được ưu tiên hơn của riêng bạn. Bằng cách nhấn mạnh mức độ ưu tiên của chỉ thị của bạn, có hiệu lực, hãy ưu tiên $render của bạn - như trước khi thay đổi trong 1.2 rc3.

+0

Tôi cho rằng điều này là đúng như nó được, tôi sẽ kiểm tra này vào ngày mai và sẽ giữ cho bạn được đăng, bạn có thể trả lời nếu tôi sẽ gặp phải và các vấn đề bổ sung ?. Về cơ bản, tôi đã sử dụng khả năng xây dựng Angular 1.2.x để liên kết ng-model thành một trường tệp sau khi gặp phải vấn đề này –

+0

Yea, phải mất khá nhiều thời gian để tìm ra điều này. Tôi muốn theo dõi nhật ký thay đổi - tôi sẽ không ngạc nhiên khi thấy Angular làm gì đó để sửa lỗi này. Trong khi đó, tôi không thấy lý do tại sao mức độ ưu tiên cao hơn sẽ gây ra bất kỳ vấn đề gì cho bạn. – KayakDave

+0

Âm thanh tốt, tôi sẽ đảm bảo kiểm tra vào ngày mai và cho bạn biết nếu nó là nó :) Cảm ơn! –

1

Tôi đã thử nghiệm điều này với góc 1,2.10 cho hộp văn bản và bất kỳ mức độ ưu tiên nào tôi đã đặt, phương thức $ render gốc được đặt sau đó sẽ ghi đè hàm $ render của tôi.

Sự cố này xảy ra trong mô-đun tinymi góc-ui cũng không thể hiển thị giá trị mô hình ban đầu. Vì vậy, tôi đã thay đổi một phần thời gian chờ trong chỉ thị TinyMCE để ghi đè lên $ ban đầu làm cho phương pháp như sau:

var render = function() { // my rendering code }  
setTimeout(function() { 
         tinymce.init(options); 
         if (ngModel.$render != render) { 
          var originalRender = ngModel.$render; 
          ngModel.$render = function() { 
           originalRender(); 
           render(); 
          }; 
        } 
       }); 

Bằng cách này, sau khi tất cả "liên kết" các chức năng được thực hiện, bạn có thể ghi đè lên làm cho phương pháp.

Các vấn đề liên quan