当前位置: 首页 > 面试题库 >

如何获取带有选择/取消选择所有功能和不确定值的angular.js复选框?

宰父宾实
2023-03-14
问题内容

我正在寻找完全像这些的东西(带有“父母”的三态复选框)。但是使用该解决方案并不好用,因为我现在不依赖jQuery,因此我需要调用$
scope。$ apply来使模型识别自动(未选中)的复选框单击的jQuery。

这是angular.js的错误,要求执行ng-
indeterminate-value。但这仍然不能使我同步到所有孩子,这是我认为不应该成为我的控制器的一部分的事情。

我正在寻找的是这样的:

  • A“NG-儿童模型”指令用的语法:<input type="checkbox" ng-children-model="child.isSelected for child in listelements">。布尔值列表将被计算,如果选择0->复选框为false。如果全部选中->复选框为true。否则->复选框不确定。
  • 在我的控制器中,我将有以下内容: $scope.listelements = [{isSelected: true, desc: "Donkey"},{isSelected: false, desc: "Horse"}]
  • 复选框将照常使用<tr ng-repeat="elem in listelements"><td><input type="checkbox" ng-model="elem.isSelected"></td><td>{{elem.desc}}</td></tr>
  • 据我了解,浏览器将确定单击不确定的复选框进入哪种状态。

问题答案:

由于您需要一种新的类型/类型的组件,因此这对于自定义指令来说是一个很好的案例。
由于父/主/三态复选框和各个双状态复选框需要相互交互,因此我建议使用带有其自己的控制器的单个指令来处理逻辑。

<tri-state-checkbox checkboxes="listelements"></tri-state-checkbox>

指示:

app.directive('triStateCheckbox', function() {
  return {
    replace: true,
    restrict: 'E',
    scope: { checkboxes: '=' },
    template: '<div><input type="checkbox" ng-model="master" ng-change="masterChange()">'
      + '<div ng-repeat="cb in checkboxes">'
      + '<input type="checkbox" ng-model="cb.isSelected" ng-change="cbChange()">{{cb.desc}}'
      + '</div>'
      + '</div>',
    controller: function($scope, $element) {
      $scope.masterChange = function() {
        if($scope.master) {
          angular.forEach($scope.checkboxes, function(cb, index){
            cb.isSelected = true;
          });
        } else {
          angular.forEach($scope.checkboxes, function(cb, index){
            cb.isSelected = false;
          });
        }
      };
      var masterCb = $element.children()[0];
      $scope.cbChange = function() {
        var allSet = true, allClear = true;
        angular.forEach($scope.checkboxes, function(cb, index){
          if(cb.isSelected) {
            allClear = false;
          } else {
            allSet = false;
          }
        });
        if(allSet)        { 
          $scope.master = true; 
          masterCb.indeterminate = false;
        }
        else if(allClear) { 
          $scope.master = false; 
          masterCb.indeterminate = false;
        }
        else { 
          $scope.master = false;
          masterCb.indeterminate = true;
        }
      };
      $scope.cbChange();  // initialize
    },
  };
});

更改模板以满足您的需要,或者将外部模板与templateUrl一起使用。

该指令假定checkboxes数组包含具有isSelected属性和desc属性的对象。

柱塞。

更新
:如果您只希望该指令仅呈现三态复选框,因此单个复选框位于HTML中(例如@Piran的解决方案),这是该方法的另一个更小巧的变体。对于这个笨拙的人,HTML将是:

<tri-state-checkbox checkboxes="listelements" class="select-all-cb">
</tri-state-checkbox>select all
<div ng-repeat="item in listelements">
   <input type="checkbox" ng-model="item.isSelected"> {{item.desc}}
</div>


 类似资料:
  • 我有一个超文本标记语言选择框,在我的jsp中启用了多选择。我从其他按钮动态填充选项。因此,用户不会从该选择框中选择任何值。我必须将selectbox的所有值传递给其他jsp。 我正在使用表单操作提交浏览jsp。这样做时,我无法获得所有的选择框值。 此选项仅提供该多选框中的选定值。我想要的是从selectbox中获取所有值,无论是否选中。 谢谢

  • 问题内容: 我有一个带有属性的元素。如何使用JavaScript获取此元素的选定值? 这是我正在尝试的: 问题答案: 没有jQuery: 快速示例:

  • 问题内容: 我正在尝试选中一个复选框的所有复选框。但是该怎么做呢? 这是我的HTML: 我创建了一个额外的复选框以选择并取消选择所有复选框。 JS: 我也尝试过,但是没有一个对我有用:( 问题答案: 您错过了容器的div 和和。 是正确的变体。 https://jsfiddle.net/0vb4gapj/1/

  • 问题内容: 我有一组具有相同名称的输入复选框,并且我想确定已使用JavaScript选中了哪些复选框,如何实现呢?我只知道如何获取所有复选框,如下所示: 问题答案: 一个简单的for循环,用于测试属性并将选中的属性附加到单独的数组中。从那里,如果需要,您可以进一步处理数组。

  • 如问题所述,当选中标题中的“全选”复选框时,我已经可以选中gridview行中的复选框,当取消选中标题中的“全选”复选框时,取消选中gridview行中的复选框。我想做的是,当没有选中行中的所有复选框时,则不选中标题中的“全选”复选框,反之亦然(当选中行中的所有复选框时,则选中标题中的“全选”复选框)。 我该怎么做? 我已经做了我想要实现的,但是标题中的复选框开始影响(选中或取消选中),即使我只选

  • 问题内容: 我正在尝试编写一个项目。在我的项目中,我可以成功拖动图像。 这是图片,这是我的ViewOnTouchListener代码: 请看图片 ,这是我的DragView代码: 一切都好。但是我需要做的是,当用户单击图像(贴纸)时,阴影和边框消失。当用户再次单击图像时,它们会再次出现。我不知道该怎么办。 问题答案: 最后,我找到了正确的答案。我认为这可能会有所帮助。所以我分享。首先,我在Drag