Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angularjs多重复选框筛选_Javascript_Jquery_Angularjs_Checkbox - Fatal编程技术网

Javascript angularjs多重复选框筛选

Javascript angularjs多重复选框筛选,javascript,jquery,angularjs,checkbox,Javascript,Jquery,Angularjs,Checkbox,我想筛选多个复选框,但一次只能选择一个。不知道如何构造它,以便我可以过滤所有值 我已经创建了一个,任何帮助都是感激的 <input type="checkbox" id="cb" ng-model="word" ng-true-value="has kitchen" ng-false-value=""> Jimi无法同时选择两个复选框的主要问题是,它们都绑定到同一个模型属性 如前所述,过滤器还存在一些其他声明性问题,但我认为创建自定义过滤器对于满足您的需求来说可能有些过头了

我想筛选多个复选框,但一次只能选择一个。不知道如何构造它,以便我可以过滤所有值

我已经创建了一个,任何帮助都是感激的

<input type="checkbox" id="cb" ng-model="word"  ng-true-value="has kitchen" ng-false-value="">


Jimi

无法同时选择两个复选框的主要问题是,它们都绑定到同一个模型属性

如前所述,过滤器还存在一些其他声明性问题,但我认为创建自定义过滤器对于满足您的需求来说可能有些过头了

我的方法是创建一组选项,分别跟踪每个选择:

  $scope.options = [
  { 
    name: 'has kitchen', 
    selected: false 
  }, { 
    name: 'has bakery', 
    selected: false 
  }];
并迭代它们来构建您的复选框

<label ng-repeat="option in options">
   <input type="checkbox" ng-model="option.selected"/>{{option.name}}
</label>
您可以使用一个简单的控制器函数来提供过滤

<ul>
  <li ng-repeat="item in data | filter:itemFilter">{{item.name}}</li>
</ul>
当然,这是匹配逻辑的简化版本(去掉了常规的exp内容),但它应该演示其机制,然后您可以从中获取if

这里有一个有效的例子

编辑

下面是另一个版本,可以与原始json模型一起使用

<ul>
  <li ng-repeat="item in data.list | filter:itemFilter">{{item.name}}</li>
</ul>

更新的示例

Hi@MPowerKC,感谢您如此简洁地回答问题。恐怕我不能更改JSON,因为它是整个基础设施的一部分,但您肯定给了我一些想法让我尝试。@Jimi,我明白了,请看上面使用原始JSON格式的编辑。希望这有帮助:)
  $scope.itemFilter = function(item) {
    var filters = $scope.options.filter(function(element, idx, array) {
      return element.selected;
    }) || [];

    var matched = true;
    filters.forEach(function(option) {
      matched = matched && item.services.indexOf(option.name) >=0;
    })
    return matched;
  };
<ul>
  <li ng-repeat="item in data.list | filter:itemFilter">{{item.name}}</li>
</ul>
  $scope.itemFilter = function(item) {
    var filters = $scope.options.filter(function(element, idx, array) {
      return element.selected;
    }) || [];

    var matched = true;
    filters.forEach(function(option) {
       var matchingService = item.services[0].services.filter(function(element, idx, array) {
         return element.serviceName == option.name;
       }) || [];
       matched = matched && matchingService.length > 0;
    });

    return matched;
  };