Angularjs复选框在两个数组上过滤

时间:2018-03-12 23:57:12

标签: javascript angularjs checkbox filter

我一直在努力过滤两个不同的数组,一个是复选框值,另一个是整数数据。换句话说,第一个数组包含来自共享点列表的字段值,第二个数组包含来自相同共享点列表的项。如何根据选中的复选框进行过滤。这是我的代码:

print_r($_POST);

我尝试过使用ng-model,但那并没有奏效。请帮忙。谢谢!

2 个答案:

答案 0 :(得分:0)

作为第一步,当复选框被选中时,您需要为将在ng模型中设置的复选框输入提供值。

答案 1 :(得分:0)

首先,您需要跟踪所选的选项,因此我将已检查属性添加到每个进程对象,然后ng-model更改其值。

第二我改变了两个这样的阵列 [“Alfreds Futterkiste,Berglunds Snabbkop,Ernst Handel,Centro Comercial Moctezuma”]
从一个长值到
  [“Alfreds Futterkiste”,“Berglundssnabbköp”,“Ernst Handel”,“Centro comercial Moctezuma”]

最后你需要定义自定义过滤器功能,在我的情况下 containsFn 检查每个 toBeFiltered 项目,看看这个项目的某些进程是否包含在进程中数组,条件是其检查== true

angular.module('myApp', []).controller('myCtrl', function($scope){
    $scope.processes = [
    {name: "Alfreds Futterkiste", checked: false},
    {name: "Berglunds snabbköp", checked: false},
    {name:"Centro comercial Moctezuma", checked: false},
    {name: "Ernst Handel", checked: false}
  ];
  $scope.toBeFiltered = [{
  "Title": "title1",
  "process": ["Alfreds Futterkiste"]
  }, {"Title" : "title2",
  "process": ["Alfreds Futterkiste", "Berglunds snabbköp"]

  },{"Title" : "title2",
  "process": ["Alfreds Futterkiste", "Berglunds snabbköp","Ernst Handel", "Centro comercial Moctezuma"]
  }];
  $scope.containFn = function(item){
  	var found = false;
  	 item.process.forEach(function(element){ 
     		if($scope.processes.some(function(it) {return  (it.name == element && it.checked== true) })) found = true;
     });
     return found;
  }
  
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app='myApp' ng-controller='myCtrl'>
    <div ng-repeat="x in processes">
<input type="checkbox" ng-model="x.checked"/>{{x.name}}
</div>

<div ng-repeat = "y in toBeFiltered | filter: containFn">
<span class="title">{{y.Title}}</span>
<span class="process"> {{y.process}}</span>
</div>
    
</div>

运行代码段,如果有什么不清楚,或者我没有随时发表评论