Angular - 使用函数对数字求和并将其放在视图中

时间:2013-10-21 09:51:45

标签: javascript angularjs

我正在尝试创建一个函数来汇总来自工厂的一些数字(以及来自客户端的一些实时),并将总和放在视图中。完全卡住了。

1 - 首先,我不明白如何在视图中显示在控制器函数中组装的变量。

所以让我说我有类似的东西:

$scope.total = function() {
    var totalNumber = 0;

}  

如何在视图中显示totalNumber?

我假设在得到这个之后,为了总结我的工厂数据:

var revenues = [
            { amount: 1254 },
            { amount: 1654 },
            { amount: 33 },
            { amount: 543 }

    ];

我必须做类似的事情:

 $scope.total = function() {
 var totalNumber = 0;
    for(i=0; i<revenues.length; i++){
      totalNumber = totalNumber + revenues[i].amount
    }

    }  

这是对的吗?如果我动态更改收入数组,它会实时更新吗?

3 个答案:

答案 0 :(得分:8)

正如所承诺的,这是一种不同的方法。一个监视revenues集合并在每次更改时更新值的人:

<div ng-app ng-controller="SumCtrl">

  Total: {{total}}

  <input type="text" ng-model="newAmount" />
  <button ng-click="add(newAmount)">Add</button>

</div>

JavaScript:

function SumCtrl($scope) {

  function total() {
    var totalNumber = 0;
    for(var i=0; i<$scope.revenues.length; i++){
      totalNumber = totalNumber + $scope.revenues[i].amount
    }

    return totalNumber;
  }

  $scope.revenues = [
    { amount: 1254 },
    { amount: 1654 },
    { amount: 33 },
    { amount: 543 }
  ];

  $scope.add = function(value) {
    $scope.revenues.push({ amount: parseInt(value) });
  }

  $scope.$watchCollection("revenues", function() {
    $scope.total = total();
  });

}

答案 1 :(得分:0)

有几种方法可以解决这个问题。如果你想要一个total()函数,它会是这样的:

<div ng-app ng-controller="SumCtrl">

  Total: {{total()}}

  <input type="text" ng-model="newAmount" />
  <button ng-click="add(newAmount)">Add</button>

</div>

以下是代码:

function SumCtrl($scope) {

  $scope.revenues = [
    { amount: 1254 },
    { amount: 1654 },
    { amount: 33 },
    { amount: 543 }
  ];

  $scope.total = function() {
    var totalNumber = 0;
    for(var i=0; i<$scope.revenues.length; i++){
      totalNumber = totalNumber + $scope.revenues[i].amount
    }

    return totalNumber;
  }

  $scope.add = function(value) {
    $scope.revenues.push({ amount: parseInt(value) });
  }

}

只要范围发生变化(很多),total()函数就会重新评估。更好的方法是观察revenues的更改并更新静态值...我也会发布该答案。

答案 2 :(得分:0)

这是plunker

执行此操作的方法不止一种,并且您的控制器可能看起来有所不同,具体取决于数据在工厂中的显示方式。

编辑:在我写作的时候,这里发布了几个很好的答案。这与Brian的第一种方法类似。