6

着信ファクトリからのいくつかの数値(およびクライアント側からのリアルタイムの数値)を合計し、その合計をビューに入れる関数を作成しようとしています。完全に立ち往生。

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
    }

    }  

これは正しいです?収益配列を動的に変更すると、リアルタイムで更新されますか?

4

3 に答える 3

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

}
于 2013-10-21T10:03:33.817 に答える
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て静的な値を更新することです...その回答も投稿します。

于 2013-10-21T09:59:11.717 に答える
0

ここにプランカーがあります

これを行うには複数の方法があり、ファクトリからのデータがどのように見えるかによって、コントローラーの外観が異なる場合があります。

編集:私が書いている間に、いくつかの良い答えがここに投稿されました。これは、Brian の最初のアプローチに似ています。

于 2013-10-21T10:16:02.653 に答える