如何将字符串数组值的总和绑定到$ scope

时间:2015-09-01 03:22:53

标签: javascript jquery arrays angularjs

我正在尝试绑定表中所选复选框的总和。我几乎在那里,但我无法弄清楚我做错了什么。图为2个选中的框 picture

你看到了我的代码的结果。如果有更好的方法可以解决这个问题,我愿意接受建议。

  $http.get('/api/Products/').success(function (data, status) { $scope.productList = data; });
    $scope.selection = [];
    $scope.OrderAmount = []
    $scope.myTotal = 0;
    $scope.toggleSelection = function toggleSelection(ProductId) {
        var idx = $scope.selection.indexOf(ProductId);
        if (idx > -1) {
            $scope.selection.splice(idx, 1);
        }
        else {
            $scope.selection.push(ProductId);
        }

        for (var i = 0; i < $scope.selection.length; i++) {
            var OrderProductId = $scope.selection[i]
            var data = Enumerable.From($scope.productList).Where("x => x.ProductId == '" + OrderProductId + "'").ToArray();

            $scope.OrderAmount.push(data[0].ProductPrice)

     // $scope.OrderAmount = ["8500", "8500"]

            for (var i = 0, len = $scope.OrderAmount.length; i < len; i++) {
                $scope.myTotal += $scope.OrderAmount[i][0];
            };
        };

        $scope.$watch('myTotal', function (value) {
            $scope.model.OrderAmount = value;
        });
    };

视图

<table class="table">
    <th>Product</th>
    <th>Price</th>
    <tbody>
      <tr ng-repeat="model in products">
        <td>
           <div class="toggle-switch" data-ts-color="blue">
             <input id="{{model.ProductId}}" type="checkbox" hidden="hidden" ng-checked="selection.indexOf(model.ProductId) > -1" ng-click="toggleSelection(model.ProductId)">
            <label for="{{model.ProductId}}" class="ts-helper"></label>
           </div>
        </td>
        <td>{{model.ProductName}}</td>
        <td>{{model.ProductPrice}}</td>
       </tr>
     </tbody>
   </table>

  <div class="form-group">
            <input type="text" ng-model="model.OrderAmount" class="form-control fg-input">
   </div>

更新到第一个回答 pic

1 个答案:

答案 0 :(得分:1)

您正在错误地进行数据绑定。选中状态应使用ng-model绑定,但不能使用ng-checked绑定。您可以使用checked内的属性(在示例中为model),然后循环products来计算总和。

<tr ng-repeat="model in products">
    <td>
       <div class="toggle-switch" data-ts-color="blue">
           <input id="{{model.ProductId}}" type="checkbox" hidden="hidden" ng-model="model.checked" ng-click="toggleSelection()">
           <label for="{{model.ProductId}}" class="ts-helper"></label>
       </div>
    </td>
    <td>{{model.ProductName}}</td>
    <td>{{model.ProductPrice}}</td>
</tr>

控制器:

$scope.toggleSelection = function() {
    var sum = 0;
    angular.forEach($scope.products, function(value){
        if (value.checked) sum += value.ProductPrice;
    });

    $scope.model.OrderAmount = sum;
}