当前位置: 首页 > 知识库问答 >
问题:

我如何用AngularJS绑定到复选框值列表?

佟阳飙
2023-03-14

我有几个复选框:

<input type='checkbox' value="apple" checked>
<input type='checkbox' value="orange">
<input type='checkbox' value="pear" checked>
<input type='checkbox' value="naartjie">

我希望绑定到控制器中的一个列表,这样,每当更改复选框时,控制器就会维护所有选中值的列表,例如,['apple','pear']

ng-model似乎只能将一个复选框的值绑定到控制器中的一个变量。

有没有另一种方法可以这样做,以便我可以将四个复选框绑定到控制器中的一个列表?

共有1个答案

公冶经纶
2023-03-14

有两种方法来处理这个问题。使用简单数组或对象数组。每种解决方案都有利弊。下面你会为每个案例找到一个。

HTML可能如下所示:

<label ng-repeat="fruitName in fruits">
  <input
    type="checkbox"
    name="selectedFruits[]"
    value="{{fruitName}}"
    ng-checked="selection.indexOf(fruitName) > -1"
    ng-click="toggleSelection(fruitName)"
  > {{fruitName}}
</label>

适当的控制器代码为:

app.controller('SimpleArrayCtrl', ['$scope', function SimpleArrayCtrl($scope) {

  // Fruits
  $scope.fruits = ['apple', 'orange', 'pear', 'naartjie'];

  // Selected fruits
  $scope.selection = ['apple', 'pear'];

  // Toggle selection for a given fruit by name
  $scope.toggleSelection = function toggleSelection(fruitName) {
    var idx = $scope.selection.indexOf(fruitName);

    // Is currently selected
    if (idx > -1) {
      $scope.selection.splice(idx, 1);
    }

    // Is newly selected
    else {
      $scope.selection.push(fruitName);
    }
  };
}]);

缺点:Add/Remove很麻烦,因为必须管理两个列表(输入和选择)

HTML可能如下所示:

<label ng-repeat="fruit in fruits">
  <!--
    - Use `value="{{fruit.name}}"` to give the input a real value, in case the form gets submitted
      traditionally

    - Use `ng-checked="fruit.selected"` to have the checkbox checked based on some angular expression
      (no two-way-data-binding)

    - Use `ng-model="fruit.selected"` to utilize two-way-data-binding. Note that `.selected`
      is arbitrary. The property name could be anything and will be created on the object if not present.
  -->
  <input
    type="checkbox"
    name="selectedFruits[]"
    value="{{fruit.name}}"
    ng-model="fruit.selected"
  > {{fruit.name}}
</label>

适当的控制器代码为:

app.controller('ObjectArrayCtrl', ['$scope', 'filterFilter', function ObjectArrayCtrl($scope, filterFilter) {

  // Fruits
  $scope.fruits = [
    { name: 'apple',    selected: true },
    { name: 'orange',   selected: false },
    { name: 'pear',     selected: true },
    { name: 'naartjie', selected: false }
  ];

  // Selected fruits
  $scope.selection = [];

  // Helper method to get selected fruits
  $scope.selectedFruits = function selectedFruits() {
    return filterFilter($scope.fruits, { selected: true });
  };

  // Watch fruits for changes
  $scope.$watch('fruits|filter:{selected:true}', function (nv) {
    $scope.selection = nv.map(function (fruit) {
      return fruit.name;
    });
  }, true);
}]);

优点:添加/删除非常容易

缺点:数据结构比较复杂,按名称切换比较麻烦,或者需要一个helper方法

演示:http://jsbin.com/imaquc/1/

 类似资料:
  • 问题内容: 我有几个复选框: 我想绑定到控制器中的列表,以便每当更改复选框时,控制器都维护所有检查值的列表,例如。 ng-model似乎只能将一个复选框的值绑定到控制器中的变量。 还有另一种方法可以使四个复选框绑定到控制器中的列表吗? 问题答案: 有两种方法可以解决此问题。使用简单数组或对象数组。每个解决方案都有其优缺点。您会在下面找到每种情况的一种。 用简单的数组作为输入数据 HTML可能如下所

  • 我已经检查了如何用AngularJS绑定到复选框值列表的问题。但是这个问题解释了阵列列表和在角度控制器中处理它的最佳方法。 我们如何将值绑定到checkbox,使值在未选中时为模态0,在选中时为模态1?HTML和控制器里应该有什么?

  • 问题内容: 我正在尝试使用ng- model将复选框绑定到作用域。复选框的初始状态恰好与范围模型相对应,但是当我选中/取消选中复选框时,模型不会更改。需要注意的是,模板是在运行时使用ng- include动态加载的 当我选中该框时,控制台记录为false,而当我取消选中该框时,控制台再次记录为false。我还在作用域上有一个订单模型,如果我将复选框的模型更改为order.billing_is_sh

  • 本文向大家介绍aurelia 绑定到复选框,包括了aurelia 绑定到复选框的使用技巧和注意事项,需要的朋友参考一下 示例 基本复选框 带有对象数组的复选框 带有布尔值的复选框            

  • 我的发帖方法: 索引页表单: 当我单击submit时,browser显示为错误的请求,但没有th:field=“*{userRole}”,我可以提交表单。有什么办法解决这个问题吗? 然后如@roel所述更改了表单。 多谢了。

  • 问题内容: 我已经编辑了数据,并试图仅获取用户已选择的数据。我不确定该怎么做,这就是我所拥有的: HTML: JS: 我确实以一种方式使它工作-通过向每个对象添加属性并将复选框的更改为,然后可以在函数中对此进行过滤。但是,这似乎效率很低,如果可以避免,我不想在模型中添加额外的属性。 有没有更好的办法 ? 问题答案: 的JavaScript HTML http://plnkr.co/edit/lqt