gpt4 book ai didi

javascript - 如何使用angularJS过滤选中的复选框

转载 作者:行者123 更新时间:2023-11-30 06:19:29 25 4
gpt4 key购买 nike

使用 ng-repeat 将所有对象数组列为列表,并为每个值添加了复选框。

在这里,我想过滤复选框并在点击应用过滤器时根据选中/取消选中值(复选框的)形成一个新的 JSON。

实际

我尝试通过连接过滤器名称及其值在模型范围对象 ($scope.models) 中添加选中和未选中的复选框

(即):data1(过滤器名称)+1(值)= data11

点击应用过滤器循环现有的过滤器数组并与模型对象进行比较并将匹配项推送到新数组中。

Plunker

应用过滤功能

HTML

<li ng-repeat="(key, filter) in filters">
<a href="" data-target="#{{filter.name}}" data-toggle="collapse" aria-expanded="{{enableShow.indexOf(filter.name) > -1 ? true : false}}">
{{filter.name}}
</a>
<ul class="collapse list-unstyled" id="{{filter.name}}" ng-class="{show : enableShow.indexOf(filter.name) > -1}">
<li ng-repeat="v in filter.values">
<label class="w-100" ng-show="filter.type == 'CheckBox'">
<span class="ml-3 p-1 d-block">
{{v.value}}
<input type="checkbox" ng-model="models[filter.name + v.value]" class="pull-right mt-1 ml-1" style="margin-right: 7%" />
</span>
</label>
</li>
</ul>

JS

$scope.applyFilters = function() {
var arr = [];
_.map($scope.filters, function(d) {
_.map(d.values, function(v) {
var name = d.name + v.value;
for (key in $scope.models) {
if (key == name) {
arr.push({
name: d.name,
values: v
});
}
}
});
});
console.log(arr);
};

预期

单击“应用过滤器”后,想要形成一个新的 JSON,其中仅包含其各自对象中的选定值。

{
"results": [
{
"name": "data1",
"type": "CheckBox",
"values": [
{
"value": "1"
},
{
"value": "4"
}
]
},
{
"name": "data2",
"type": "CheckBox",
"values": [
{
"value": "1"
}
]
},
{
"name": "data5",
"type": "CheckBox",
"values": [
{
"value": "3"
}
]
},
{
"name": "data6",
"type": "CheckBox",
"values": [
{
"value": "2"
}
]
}
]
}

提前致谢。

最佳答案

_.map()迭代原始数据结构并将其转换为请求的格式。使用 _.filter()_.reject()删除没有选定值的部分 ( plunker ):

$scope.applyFilters = function() {
var arr = _($scope.filters)
.map(function(o, i) {
var section = _.pick(o, ['name', 'type']);

section.values = _(o.values)
.filter(function(v, j) {
return $scope.models['data' + (i + 1) + (j + 1)];
})
.map(_.partialRight(_.pick, 'value'))
.value();

return section;
})
.reject(function(o) { return _.isEmpty(o.values); })
.value();

console.log(arr);
};

关于javascript - 如何使用angularJS过滤选中的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54053828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com