2017-04-05 82 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-圖案屬性(的可能的複製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/