динамически изменять число десятичных разрядов типа ввода

У меня есть форма и несколько номеров типа ввода в этой форме.

мне нужно динамически округлить значение пользовательского ввода до определенной настраиваемой точности (исходящей с сервера, присутствующей в ngmodel, например ct.precision). Мое входное значение может быть '' в зависимости от начального значения.

Я пытаюсь использовать номер фильтра, но я не уверен, что именно так я должен его использовать. Я пытался использовать onChange, но не могу установить точность с настраиваемым значением.

Каков наилучший способ добиться этого?

<input
    id="quantityValue-{{ $index }}"
    class="my-quantity"
    ng-model="$ct.record[$index].newQuantity"
    type="number"
    required
    min="0"
    pattern="\d+(\.\d+)?"
    maxlength="15"
>

Вот так выглядит мой ввод.


person solar apricot    schedule 29.03.2018    source источник


Ответы (1)


Попробуйте использовать ng-change как для поля ввода, так и для настраиваемого выбора точности (что бы это ни было, я выбрал <select>). Вот демо без проверок:

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $filter) {
  $scope.foo = function(x, n = 3) {
    $scope.x_ = Number($filter('number')(x, n));
  }
  $scope.precision = [0, 1, 2, 3, 4, 5];
  $scope.n = $scope.precision[0]; // default (optional)
  $scope.x = 0; // default (to remove NaN issues)
  $scope.foo($scope.x, $scope.n); // initialise precision
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>

<div ng-app="myApp" ng-controller="myCtrl">
  <select ng-model="n" ng-change="foo(x,n)" ng-options="p for p in precision">
</select>
  <hr>
  <input type="number" ng-model="x" ng-change="foo(x,n)">
  <br>{{x_}}
</div>

(Могут быть некоторые проблемы с округлением (виноват JavaScript), где округление 0.129999 дает 0.13 для точности от 2 до 5)

person Aleksey Solovey    schedule 29.03.2018
comment
спасибо за ваше предложение, но мне действительно нужно, чтобы ввод имел точность, а не отображаемое значение, чтобы показать его таким образом. - person solar apricot; 29.03.2018
comment
@solarapricot затем переименуйте все x_ в x, это просто не позволит вам вводить больше цифр (вместо того, чтобы пытаться округлить числа в большую сторону) - person Aleksey Solovey; 29.03.2018
comment
также x.toFixed(n) вместо $filter('number')(x, n) будет работать лучше - person Aleksey Solovey; 29.03.2018