使用angularjs,如何在文本框上执行数学运算并在键入值时查看结果?

问题描述 投票:3回答:5

我有一个带有2个文本框的HTML文件,一个文本框用于表示值,另一个文本框用于表示数量。底部的结果文本将值乘以数量并显示结果。

目的是在屏幕上显示成对的文本框的所有行的总和。为此,我有一个“添加新”按钮,该按钮不断添加其他对文本框。

出现在HTML上的第一组文本框反映了包含属性“ val”和“ qty”的对象的“ numbers”数组的大小。相同的值绑定到文本框。

但是,仅第一组值被添加到屏幕上。当我不断添加新的文本框并输入新的值时,结果的值应该相应地更改,但实际上并没有改变。

HTML代码

    <div ng-app="adder" ng-controller="addcontrol">
        <table>
        <tr>
            <th>Value</th><th>Quantity</th>
        </tr>
        <tr ng-repeat="number in numbers">
            <td><input type="text" ng-model="number.val"></td>
            <td><input type="text" ng-model="number.qty"></td>
            <td><input type="button" ng-click="deleteNumber($index)" value= "Delete"></td>pp',[]);
        </tr>
        </table>
        <input type="button" ng-click="add()" value="Add new">Result : {{sum}}
    </div>
</body>
</html>

Javascript

var myapp = angular.module('adder', []);
myapp.controller('addcontrol',function($scope){
$scope.numbers = [
    {val:100,
     qty:200,
    }

];

$scope.add = function()
{
    $scope.numbers.push({val:0,qty:0});
};

$scope.deleteNumber = function(val)
{
    numbers.splice(val, 1);
};
var result=0;
angular.forEach($scope.numbers, function(num){
    result+=(num.val * num.qty);

});
$scope.sum = result;

});

我在这里做错了什么?

html angularjs frontend
5个回答
5
投票

在您的代码中,总和的计算将只执行一次。

您需要添加范围的监视或将函数绑定到ng-change事件,以便在更改数字时使总和保持更新。

例如,您可以做:

<div ng-app="adder" ng-controller="addcontrol">
    <table>
    <tr>
        <th>Value</th><th>Quantity</th>
    </tr>
    <tr ng-repeat="number in numbers">
        <td><input type="text" ng-change="update()" ng-model="number.val"></td>
        <td><input type="text" ng-change="update()" ng-model="number.qty"></td>
        <td><input type="button" ng-click="deleteNumber($index)" value= "Delete"></td>pp',[]);
    </tr>
    </table>
    <input type="button" ng-click="add()" value="Add new">Result : {{sum}}
</div>

和:

var myapp = angular.module('adder', []);
myapp.controller('addcontrol', function($scope) {
  $scope.numbers = [{
      val: 100,
      qty: 200,
    }

  ];

  $scope.add = function() {
    $scope.numbers.push({
      val: 0,
      qty: 0
    });
  };

  $scope.deleteNumber = function(val) {
    numbers.splice(val, 1);
    $scope.update();
  };

  $scope.update = function() {
    var result = 0;
    angular.forEach($scope.numbers, function(num) {
      result += (num.val * num.qty);
    });
    $scope.sum = result;
  };
});

2
投票

我除了这个问题有点了解,但是您可以在单个输入字段内执行任意算术运算:

<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<body ng-app="">
  <input ng-model="expression"/>
  <p>{{$eval(expression)}}</p>
</body>

1
投票

基于Pylinux的答案:看起来似乎很明显,但是在这里。如果要添加2个表达式,请使用以下命令:

{{$eval(expression1)+ $eval(expression2) }}


0
投票

控制器中的代码仅被激活一次(渲染视图时)。因此,您的总和仅计算一次,甚至没有机会添加任何行。您需要做的是将计算结果放入函数中,以便可以根据需要重复调​​用它。

Tong的回答基本上是正确的,但是我认为这是一种更好的方法:

 <div ng-controller="addcontrol">
    <table>
    <tr>
        <th>Value</th><th>Quantity</th>
    </tr>
    <tr ng-repeat="number in numbers">
        <td><input type="text" ng-model="number.val"></td>
        <td><input type="text" ng-model="number.qty"></td>
        <td><input type="button" ng-click="deleteNumber($index)" value= "Delete"></td>
    </tr>
    </table>
    <input type="button" ng-click="add()" value="Add new">Result : {{total()}}
  </div>

var app = angular.module('app', [])
.controller('addcontrol', function($scope) {
  $scope.numbers = [{
    val: 100,
    qty: 200,
  }];

  $scope.add = function() {
    $scope.numbers.push({
      val: 0,
      qty: 0
    });
  };

  $scope.deleteNumber = function(val) {
    $scope.numbers.splice(val, 1);        
  };


  $scope.total = function(){
    var total = 0;
    angular.forEach($scope.numbers, function(num) {
      total += (num.val * num.qty);
    });
    return total;
  }
})

定义一个total函数,该函数循环遍历数组并返回适当的和。然后,您可以将该函数绑定到视图中的结果字段。这样做的好处是您不必记住在可能导致总数变化的任何地方调用update()(例如在文本框和ng-change函数中的deleteNumber)。总数会自动更新。

这里是demo


0
投票

Php

  1. 创建一个名为students的数据库(使用cmd)
  2. [创建带有列的名为tbl_students_info的表:
    • id,数据类型为int,大小为11,自动递增并设置为主键
    • 名字,数据类型为varchar,大小为30
    • 中间名,数据类型为varchar,大小为30
    • 姓,数据类型为varchar,大小为30
    • 联系人,数据类型为int,大小为11
    • 房屋地址,数据类型为int,大小为50
  3. 创建一个包含5个文本框和1个按钮的网页。第一个文本框用于名字,第二个文本框用于中间名,第三个文本框用于姓氏,第四个文本框用于联系人,最后一个文本框用于house_address和用于将这些texbox中的输入数据保存到数据库的按钮

角度

  1. 创建一个计算器,该计算器计算2个数字的总和,2个数字的乘积,2个数字的差和2个数字的商。该网页必须包含2个文本框和4个用于操作的按钮。
  2. 创建一个计算三角形面积的网页。必须有2个文本框和一个用于计算面积的按钮。
  3. 创建一个计算用户年龄的网站。必须具有文本框和按钮,文本框用于输入出生年份,按钮用于计算年龄。注意:不需要确切的月份。

帮助TT

© www.soinside.com 2019 - 2024. All rights reserved.