好吧,这是如何做到这一点。
首先,让我们添加几个CSS的线在你确保所有复选框都可见:
<style>
.row { margin-left: 0px }
input[type=checkbox] { margin-left: 30px; }
</style>
接下来,将下列行添加到您的控制器:
app.filter('unique', function() {
return function (arr, field) {
var o = {}, i, l = arr.length, r = [];
for(i=0; i<l;i+=1) {
o[arr[i][field]] = arr[i];
}
for(i in o) {
r.push(o[i]);
}
return r;
};
})
app.controller("maincontroller",function($scope){
$scope.query = {};
$scope.quer = {};
$scope.queryBy = '$';
$scope.isCollapsed = true;
$scope.selectedRefs = [];
$scope.myFilter = function (item) {
var idx = $scope.selectedRefs.indexOf(item.b);
return idx != -1;
};
$scope.toggleSelection = function toggleSelection(id) {
var idx = $scope.selectedRefs.indexOf(id);
if (idx > -1) {
$scope.selectedRefs.splice(idx, 1);
}
else {
$scope.selectedRefs.push(id);
}
};
唷。
由于某些原因,您的Plunkr版本AngularJS未识别unique
属性,因此我向控制器添加了一个属性。
最后,你的HTML改成这样:
<div class="row">
<label data-ng-repeat="x in projects | unique:'b' | orderBy:'b'" >
<input
id="x.b"
type="checkbox"
ng-click="toggleSelection(x.b)"
ng-init="selectedRefs.push(x.b)"
ng-checked="selectedRefs.indexOf(x.b) > -1" />
{{x.b}}
</label>
</div>
...和你的NG-重复这个...
<tr ng-click="isCollapsed = !isCollapsed" ng-repeat-start="x in projects | filter:myFilter | orderBy:orderProp">
如果你想知道这是如何工作的,添加这些行:
<div style="margin:10px 10px 30px 10px">
<pre>{{ selectedRefs }} </pre>
</div>
我喜欢这个窍门:你可以看到我们的“selectedRefs
”阵列的确切内容,看它在我们勾选/取消勾选我们的复选框时更改。这在开发/测试我们的绑定时确实有帮助!
正如你可以看到,这些变化使用新unique
功能,从您的project
阵列得到您的不同值的列表,并在第一次加载页面,我们就将所有的值到我们的新“ selectedRefs
“阵列。
["123","321","456","654","789","987"]
然后,当您勾选/取消勾选复选框时,我们从该列表中添加/删除该项目。
最后,我们在ng-repeat
中使用该过滤器。
ng-repeat-start="x in projects | filter:myFilter | orderBy:orderProp"
工作完成!
更新
如果你想与所有的复选框取消选中开始关闭,那么它是一个简单的变化。只是删除此行...
ng-init="selectedRefs.push(x.b)"
..和改变myFilter
功能最初显示所有项目..
$scope.myFilter = function (item) {
if ($scope.selectedRefs.length == 0)
return true;
var idx = $scope.selectedRefs.indexOf(item.b);
return idx != -1;
};
,并添加了“全部清除”按钮,只需添加一个按钮,您的形式,它在你的AngularJS控制器这样调用一个函数..
$scope.clearAll = function() {
$scope.selectedRefs = [];
};
(我还没有测试,虽然这些建议。)
亲爱的主,什么CSS属性设置一个poointer ** **这只手?我现在想知道! :D –
这是Windows 10中新的默认光标。他们可能会选择在发布之前更改它。 ;-) –
哦,该死的耻辱;) –