AngularJS如何仅在controller.js中管理复选框?

时间:2014-01-07 20:19:32

标签: angularjs angularjs-ng-repeat

是否可以仅在controllers.js中管理和保存复选框值(对象)?

提前致谢。

我有这个HTML代码(实体是一个对象):

<table> 
  <tr data-ng-repeat="entity in entities">
    <td> <input type='checkbox' ng-click="toggleChecked(entity)"> {{entity.name}}</td> 
  </tr>
</table>
<pre>{{selectedBoxes|json}}</pre>

在我的controllers.js中我这样做了:

$scope.selectedBoxes = [];
$scope.toggleChecked = function(entity) { 
  if ($scope.selectedBoxes.length > 0) { 
    for (var box in $scope.selectedBoxes) { 
      if (box.name == entity.name) {
        $scope.selectedBoxes.splice(box, 1);
        return;
      }
    }
  } else {
    $scope.selectedBoxes.push(entity);
  }
} 

我无法打印此<pre>{{selectedBoxes|json}}</pre>

1 个答案:

答案 0 :(得分:0)

操纵模型的角度方法实际上不鼓励使用点击来操纵模型。 我建议如下:

<table> 
  <tr data-ng-repeat="entity in entities">
    <td> <input ng-model="entity.checked" type='checkbox'> {{entity.name}}</td> 
  </tr>
</table>
<pre>{{selectedBoxes()| json}}</pre>

控制器:

$scope.selectedBoxes = function() { 
    var selected = [];
    for (var entity in $scope.entities) {
        if ($scope.entities[entity].checked) {
            selected.push($scope.entities[entity]);
        }
    }

    return selected;
}; 

每当实体上的属性发生变化时,selectedBoxes()将重新评估哪个会自动更新html。