根据AngularJS中的一系列输入更新值

时间:2015-06-03 10:59:03

标签: javascript angularjs angularjs-ng-repeat angular-ngmodel

我在这里想要实现的是,当用户将金额输入一系列文本字段时,剩余金额会减少。

这些文本字段是由一个角度循环及其需要更新的剩余安装变量生成的,因此,如果新鲜剩余金额为40,那么用户将10输入到字段1中,那么剩余金额将变为30全部直到0。

    <div class="row">
            <div class="col text-center error">
                <span ng-model="remainingAmount">{{ remainingAmount }}</span> left to distribute
            </div>
        </div>
    </div>

    <div class="list">

        <div class="item item-button-right" ng-repeat="user in users">
            {{ user.first_name }} {{ user.last_name }}
            <span class="item-note">
                <input type="text"  />
            </span>
        </div>

    </div>

普兰克:http://plnkr.co/edit/NmwTfGNC7jJyRL1kADCJ

2 个答案:

答案 0 :(得分:1)

尝试将输入绑定到模型。然后你可以计算其中一个输入的剩余变化:

HTML:

<input type="text" ng-model="user.amount" ng-change="calc()" />

JS:

$scope.calc = function() {
  var total = 0, user;
  for (user in $scope.users) {
    total += parseInt($scope.users[user].amount, 10) || 0;
  }
  $scope.remainingAmount = Math.max($scope.startAmount - total, 0);
} 

请参阅此plunker

答案 1 :(得分:0)

没有验证或任何事情的简单示例(不确定为什么将对象用作数组...所以我切换到使用数组 - 也将输入从text更改为number避免必须重新解析数字,因为angular会将属性设置为字符串):

plunkr

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

app.controller('MainCtrl', function($scope) {
    var maxAmount = 40;
    $scope.remainingAmount = maxAmount;
    $scope.users = [
        {'id':1, 'first_name':'Joe', 'last_name': 'Bloggs', amountUsed: 0},
        {'id':2, 'first_name':'Chris', 'last_name': 'Scott', amountUsed: 0}
    ];

    $scope.updateUsage = function(){
      var totalUsed = 0;

      for (var i = 0; i < $scope.users.length; i++) {
        var u = $scope.users[i];
        totalUsed += u.amountUsed;
      }

      $scope.remainingAmount = maxAmount - totalUsed;
    }
});