2017-10-15 116 views
0

我试图更改ngModel(input type="number")格式。如您所见,此代码在angularjs 1.2.23版本中运行良好,但在1.6.4版本中不起作用。其他解决方案?angularjs指令更改ngModel输入类型数字格式

Output must be: 25,00 

var app= angular.module('myApp',[]); 
 
app.controller('myCtrl',function($scope){ 
 
    $scope.test=25; 
 
}) 
 

 
.directive('price', function($filter) { 
 
    return { 
 
     restrict: 'A', 
 
     require: '?ngModel', 
 
     link: function(scope, element, attrs, ngModel) { 
 
      ngModel.$formatters.push(function (value) { 
 
       return $filter('number')(value,2); 
 
      }); 
 
     } 
 
    } 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myApp" ng-controller="myCtrl"> 
 
    <input type="number" ng-model="test" price> 
 
</div>

回答

2

Inputnumber类型需要Number不是String

在您的例子返回值将是一个String

ngModel.$formatters.push(function (value) { 
    return $filter('number')(value,2); 
}); 

使用parseFloat()parseFloat()函数解析一个参数并返回一个浮点数。在我的方法中,我使用了step属性,该属性为0.01增加值。

的jsfiddle:

var app= angular.module('myApp',[]); 
 
app.controller('myCtrl',function($scope){ 
 
    $scope.test=25; 
 
}) 
 

 
.directive('price', function($filter) { 
 
    return { 
 
     restrict: 'A', 
 
     require: '?ngModel', 
 
     link: function(scope, element, attrs, ngModel) { 
 
      ngModel.$formatters.push(function (value) { 
 
       return parseFloat(value); 
 
      }); 
 
     } 
 
    } 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
 
<div ng-app="myApp" ng-controller="myCtrl"> 
 
    <input type="number" step=".01" price ng-model="test"> 
 
</div>

+0

谢谢您的回答!没有小数时的输出必须是“25,00”而不是“25”。 step =“。01”工作在小数点时,但不是小数点时。 –

+0

我知道。也许别人可以解决问题。顺便说一句,你可以解决它与输入类型文本,而不是数字。 –