2016-08-22 23 views
0

我試圖找出是否有一個指令,所有<input type="number">元素綁定,而不必回去,並添加一個類,附加屬性等,每一種方式號碼字段?角1.4.7指令綁定到所有數字輸入

我有很多數量的領域,所以我希望以避免必須全部更新。

回答

0

由於它不會出現有特異性結合於輸入類型的方式,我剛結束了創建綁定到每個輸入端的簡單的指令,然後分離該指令的功能的數量類型的輸入。

.directive('input', ['$document', '$log', '$filter', function ($document, $log, $filter) { 
    return { 
     restrict: 'E', 
     require: '?ngModel', 
     scope: { 
     directiveConfig:  '=', 
     controllerInterface: '=' 
     }, 

     link: function (scope, element, attrs, ngModelCtrl) { 
     // -------------------------------------------------------------- 
     // Formatters & Parsers for `input[type="number"]` only 
     // -------------------------------------------------------------- 
      if (attrs.type === "number") { 
      // Prevents number inputs from using scrolling to change number. 
      element.bind('mousewheel', function (event) { 
       event.preventDefault(); 
      }); 

      // Prevents number input from changing with up/down arrow keys and 
      // instead simulates tabbing. 
      element.bind("keydown keypress", function (event) { 
       var inputs = element.closest('form').find(':input'); 

       switch (event.which) { 
       case 38: 
        // Arrow Up: 38 
        inputs.eq(inputs.index(element) - 1).focus(); 
        event.preventDefault(); 
        break; 
       case 40: 
        // Arrow Down: 40 
        inputs.eq(inputs.index(element) + 1).focus(); 
        event.preventDefault(); 
        break; 
       default: 
        break; 
       } 
      }); 

      // Ensures that only numbers can be entered. 
      var numericUserInput = function(value) { 
       var parsed = null; 

       if ($filter('exists')(value)) { 
       parsed = parseFloat(value.toString().replace(/[^0-9.]+$/, ''), 10); 

       if (typeof(value) != "number") { 
        parsed = null; 
       } 

       if (parsed !== value) { 
        ngModelCtrl.$setViewValue(parsed); 
        ngModelCtrl.$render(); 
       } 
       } 

       return parsed; 
      } 

      ngModelCtrl.$parsers.push(numericUserInput); 
      } 

     } 
    } 
}])