使用angularjs中的复选框来管理对象数组

时间:2013-02-09 05:26:45

标签: angularjs

我问过一个问题 How to associate objects as models using ng-options in angularjs

我得到了一个非常快的答案。我的后续问题是响应使用<select mutiple>来处理子对象数组。

您可以在http://plnkr.co/edit/FQQxrSE89iY1BnfumK0A?p=preview

处使用<select>查看我想要的实际示例

如何在重复<input type='checkbox'>对象数组中的项目时使用<select>(而不是ng:model="shirt.colors")来处理该对象数组,即colors

原因,这看起来如此复杂,我必须管理一个对象数组而不是值数组...例如,如果你看小提琴,有color个对象和{ {1}}具有多种颜色的对象。

如果shirt对象发生更改,则应更改color个对象中相应的color个对象。

提前谢谢。

1 个答案:

答案 0 :(得分:18)

您只需要在您的范围中使用一些中间值,并将复选框绑定到它。在你的控制器中 - 注意它的变化,并根据它的价值手动重建shirt.colors。

<div ng-repeat='shirt in shirts'>
  <h3>Shirt.</h3>
  <label>Size: <input ng-model='shirt.size'></label><br/>
  <label>Colors:</label>
  <label ng-repeat="color in colors">
    {{color.label}} <input ng-model="selection[$parent.$index][$index]" type="checkbox"/>
  </label>

    </label>
</div>

在你的控制器中:

$scope.selection = [[],[]];
$scope.$watch('selection', function () {
  console.log('change', $scope.selection);
  angular.forEach($scope.selection, function (shirtSelection, index) {
    $scope.shirts[index].colors = [];
    angular.forEach(shirtSelection, function (value, index2) {
      if (value) $scope.shirts[index].colors.push($scope.colors[index2]);
    });
  });
}, true);

您可以在此处进行测试:http://plnkr.co/edit/lh9hTa9wM5fkh3nT09RJ?p=preview