javascript - Angularjs输入ng-model仅包含两位小数或数字

标签 javascript angularjs

我有一个在 Controller 中声明了默认值并由 ng-model 传递“val:1.81”的值。此类输入必须是数字(类型:数字)。通过 Angular 过滤器,设法通过过滤器“数字 2”在下一行仅打印两位小数。此外,我需要添加几个按钮来添加或减去“0.01”,就像计数器值输入一样。

有什么方法可以仅使用两位小数来过滤输入吗?我提到这一点是因为当我通过单击按钮求和时,有时输入会打印“1.8800000000000001”。

Original JS Bin

var app = angular.module('myApp', []);

app.controller("mainCtrl", function($scope)
{
  $scope.val = 1.80;
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.1/angular.min.js"></script>
<div ng-app="myApp" ng-controller="mainCtrl">
  <br/><br/>
  <div>
    <span style="color: red">Val input:</span>
  <input type="number" ng-model="val"/>
  <button ng-click="val = val - 0.01">-0.01</button>
  <button ng-click="val = val + 0.01">+0.01</button>
  </div>
  <div>Val: {{val | number:2}}</div>
  
  <hr>
  
  Val2 (val + 20): {{ val2 = val + 20 | number:2 }}
  
  <hr>
  
  Val2 input:
  <input type="number" ng-model="val2"/>
  
</div>

最佳答案

一个(IMO 肮脏的)解决方案是监视 $scope.val 的变化,并在发生变化时将数字四舍五入为 2 位数字。

您只需按如下方式修改您的 Controller :

app.controller("mainCtrl", function($scope)
{
    $scope.val = 1.80;
    $scope.$watch(
      function(scope) { 
        return scope.val; 
      },
      function(num) {
        $scope.val = Math.round(num * 100) / 100;
      }
  );
});

这样,每当发生更改时,您都会用 2 位四舍五入的值覆盖该值。无需更改其他 HTML 和/或模板。

JS Bin 示例:http://jsbin.com/viyixofova/1/ (只有第一个输入实现了舍入)。

关于javascript - Angularjs输入ng-model仅包含两位小数或数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30754500/

相关文章:

angularjs - 模型未在指令的点击事件中更新

javascript - AngularJs - 通过 ui-sref 传递参数时获取 undefined object

javascript - 如何使用 Angular 包含文件中的 $scope 值

javascript - AngularJS 1.6 路由不工作

javascript - 尝试从外部 php 文件标记数据创建谷歌地图 api 集群

javascript - Vue.JS 嵌套 v-for 抛出 null/未定义错误

javascript - Dojo - Promise 无法访问变量

javascript - jquery .fadein .fadeout 回调嵌套排序不正确

javascript - 浏览器在执行之前会加载整个 JavaScript block 吗?

javascript - 将响应 header 从 ngResource 传递到 Controller