2013-11-28 11 views
6

昨日、角度1.0.8から角度1.2.2に移行しました。次のディレクティブの$ render関数はもう起動しません。例えば0

上記のものにあなたのディレクティブの優先順位を上げ

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

答えて

5

:?

誰もが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(); 
      }); 
     }); 
    } 
}; 
}); 

は、マークアップの前に、このような行動をencouterました:

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

this ui-tinymce issueと関連しているのはdetailed explanation of the problemです。それはあなたのものと同じです。

this changeの短いバージョンは、input$renderがあなた自身で優先されます。あなたの指令の優先順位を上げることで、実質的には$renderに優先順位を与えます。これは1.2 rc3の変更前と同じです。

+0

これは正しいと思いますが、明日これを確認し、投稿していきます。遭遇して追加の問題が発生した場合はお返事できますか? 基本的に、Angular 1.2.xビルドを使用して、この問題が発生した後にng-modelをファイルフィールドにバインドする機能を使用しました。 –

+0

そうです、これを見つけるにはかなりの時間がかかりました。私は変更ログを見守っています - これを修正するためにAngularが何かをするのを見て驚くことはありません。一方で、私はより高い優先順位があなたに何かの問題を引き起こすべき理由を見ていない。 – KayakDave

+0

いいですね、明日それをチェックして、それがもしそれだったらお知らせします:) ありがとう! –

1

私はこれをテキストボックスに対して何らかの優先順位をつけて角度1.2.10でテストしました。元の入力$ renderメソッドはその後、$ render関数をオーバーライドして設定されました。

この問題は、初期モデル値をレンダリングできないangle-ui tinymceモジュールでも発生します。だから私は、次のようにオリジナルの$はrenderメソッドをオーバーライドするためにTinyMCEのディレクティブでタイムアウト一部を変更:

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

この方法で、結局「リンク」機能が実行されている、あなたはrenderメソッドをオーバーライドすることができます。

関連する問題