11

我曾问过一个关于 如何使用 angularjs 中的 ng-options 将对象关联为模型的问题

我很快就得到了一个很棒的答案。我的后续问题是响应用于<select mutiple>处理子对象数组。

<select>您可以在http://plnkr.co/edit/FQQxrSE89iY1BnfumK0A?p=preview看到我想要的工作示例

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

原因,这对我来说似乎很复杂,因为我必须管理一个对象数组而不是值数组......例如,如果你看一下小提琴,就会有color对象和shirt具有多种颜色的对象。

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

先感谢您。

4

1 回答 1

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

于 2013-02-09T07:41:53.797 回答