Javascript 角度-使用函数求和数字,并将其放入视图中

Javascript 角度-使用函数求和数字,并将其放入视图中,javascript,angularjs,Javascript,Angularjs,我正在尝试创建一个函数,该函数将汇总来自传入工厂的一些数字(以及来自客户端的一些实时数字),并将汇总结果放入视图中。完全卡住了 1-首先,我不知道如何在视图中显示在控制器函数中组合的变量 那么让我们假设我有这样的东西: $scope.total = function() { var totalNumber = 0; } $scope.total = function() { var totalNumber = 0; for(i=0; i<revenues.len

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

1-首先,我不知道如何在视图中显示在控制器函数中组合的变量

那么让我们假设我有这样的东西:

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

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

    }  
如何获取要在视图中显示的总数

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

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

    ];
我必须做一些类似的事情:

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

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

    }  
$scope.total=函数(){
var totalNumber=0;

对于(i=0;i有几种方法可以解决这个问题。如果您想要一个
total()
函数,它如下所示:

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

  Total: {{total()}}

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

</div>

总计:{{Total()}}
添加
代码如下:

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) });
  }

}
函数SumCtrl($scope){
$scope.revenues=[
{金额:1254},
{金额:1654},
{金额:33},
{金额:543}
];
$scope.total=函数(){
var totalNumber=0;

对于承诺的(var i=0;i,这里有一种不同的方法。它监视
收入
收集并在每次更改时更新一个值:

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

  Total: {{total}}

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

</div>

总计:{{Total}
添加
还有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();
  });

}
函数SumCtrl($scope){
函数总数(){
var totalNumber=0;
对于(var i=0;i这里有一个

实现这一点的方法不止一种,根据工厂数据的外观,控制器的外观可能会有所不同


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

您需要将变量绑定到范围。
$scope.totalNumber=0
。无论total()的定义如何,您都可以通过执行{{total()}来显示其值@whirlwin不起作用..什么也没显示,如果我添加var,它会抛出一个错误这看起来是一个很好的解决方案,但是我无法让$watchCollection方法工作。我想这可能是我工厂的问题?代码:您使用的Angular的哪个版本?我认为,$watchCollection是一个新事物。它在1.2rc3中。我不认为我可以t是1.0.8。如果
$watchCollection
不可用,您可以使用
$watch
,将“deep”标志设置为true(尽管$watchCollection更好)。
$watch(“收入”,function(){},true);
您是对的。我需要更新我的版本!(我正在使用带Rails的gem)。非常感谢您的帮助,也许有一天我会像您一样成为一个聪明的Angular用户!:DBTW:total()函数可以缩写为:
return$scope.revenues.reduce(function(prev,cur){return prev+cur.amount;},0);
@yanke同意。假设至少定义了reduce,您需要为