2017-04-05 5 views
0

カスタムディレクティブを使用して入力要素に 'ng-pattern'ディレクティブを追加します。私はテンプレートで直接それをやりたいとは思わないが、要素が再コンパイルされないように見える。何か案は?前もって感謝します!ディレクティブの内容を再コンパイルする方法

HTML:

<input type="text" ng-model="personal.testNumber_string" my-model="personal.testNumber" dot-to-comma/> 

指令:

function dotToCommaConverter($compile) { 
    return { 
     require: 'ngModel', 
     restrict: 'A', 
     scope: { 
      myModel: '=' 
     }, 
     controllerAs: 'dot2Comma', 

     controller: function($scope) { 

      this.myModel = $scope.myModel; 
     }, 

     compile: function(tElem, tAttrs) { 

      return { 
       pre: function(scope, iElem, iAttrs) { 


       }, 
       post: function(scope, iElem, iAttrs, modelCtrl) { 

        iElem.attr('ng-pattern', '/^-?[0-9]+(?:\,[0-9]+)?$/'); 
        $compile(iElem.contents())(scope); 

        modelCtrl.$setViewValue(String(scope.dot2Comma.myModel).replace('.', ',')); 
        modelCtrl.$render(); 


        modelCtrl.$parsers.push(function(inputValue) { 

         var transformedInput = inputValue.replace(/[^0-9,.-]/g, ''); 
         transformedInput = transformedInput.replace('.', ','); 
         transformedInput = transformedInput.replace(' ', ''); 

         if (transformedInput !== inputValue) { 

          modelCtrl.$setViewValue(transformedInput); 
          modelCtrl.$render(); 
         } 

         if (!isNaN(Number(transformedInput.replace(',', '.')))) { 
          scope.myModel = Number(transformedInput.replace(',', '.')); 
         } else { 
          scope.myModel = undefined; 
         } 

         return transformedInput; 
        }); 
       } 
      }; 
     } 
    }; 
} 
+0

[NG-pattern属性を追加するための指令](の可能性のある重複http://stackoverflow.com/questions/22823545/directive-to-add-ng-pattern-attribute ) – Groben

答えて

0

あなたがコンパイル要素と元の要素を交換する必要があります。たとえば、次のように

//Take the modify the original and recompile 
var compiledElement = $compile('<div>Changed HTML for the Element</div>')(originalElement.scope()); 
originalElement.replaceWith(compiledElement); 

http://api.jquery.com/replaceWith/

関連する問題