Числовой фильтр фильтрует число до двух десятичных знаков, но не отображает его таким образом
Вот что я вижу:
Значение устанавливается в 160.90
, но отображается как 160.8999999999
и т. д.
<input class="form-control" ng-model="imprint.total"
value="{{imprint.total | number:2}}" readonly>
Он проходит через фильтрацию определенных входных данных, чтобы получить эту сумму, но по существу это просто цена, умноженная на количество.3 ответа:
Значение в атрибуте value будет переопределено директивой
ng-model
, когда она установит значение viewvalue, как оно отображается. У вас есть текстовое поле только для чтения, из которого вы можете также удалить ng-модель.<input class="form-control" value="{{imprint.total | number:2}}" readonly>
С помощью
ng-model
и для форматирования ввода данных в реальном времени вам потребуется создать директиву и использовать синтаксические анализаторы/формататоры для форматирования значения.
angular.module('app', []).directive('format', ['numberFilter', function(numberFilter) { return { restrict: 'A', require: 'ngModel', link: function(scope, elm, attr, ngModel) { var decPlaces = attr.format || 2; function formatter(value) { if (value) { return numberFilter(value, decPlaces); } } ngModel.$formatters.push(formatter); } } } ]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="app" ng-init="imprint=164.899999"> <input class="form-control" value="{{imprint | number:2}}" readonly> <input class="form-control" ng-model="imprint" format="2" readonly> </div>
Использование пользовательского фильтра, используя метод toFixed, ограничивает нет. десятичных значений,
App.filter('twoDecimal',function(input, scope){ return function(){ return input.toFixed(2); } })
var app = angular.module('app', []); app.controller('MainCtrl', function($scope) { $scope.data = { name: ''}; }); app.directive('twoDecimal', function () { return { restrict: 'A', require: 'ngModel', link: function (scope, element, attrs, ngModel) { ngModel.$formatters.push(function(value) {debugger return Math.round(value * 100) / 100; }); } } });
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>AngularJS Plunker</title> <script>document.write('<base href="' + document.location + '" />');</script> <link rel="stylesheet" href="style.css" /> <script data-require="angular.js@1.2.x" src="http://code.angularjs.org/1.2.15/angular.js" data-semver="1.2.15"></script> <script src="app.js"></script> </head> <body ng-app="app"> <div ng-controller="MainCtrl"> <input type="button" value="set to '12.23453'" ng-click="data.name='12.23453'"/> <input type="button" value="set to '34.3333'" ng-click="data.name='34.3333'"/> <input two-decimal ng-model="data.name" /> <pre>model is: {{data.name}}</pre> </div> </body> </html>