我正在使用AngularJS隐藏JSON数组中数据的一系列复选框。
需要实现以下目标。
我90%的完成方式:请参阅此Fiddle。
问题是:
<li>
元素)。答案 0 :(得分:1)
对于问题1,您可以在$scope.clearFilters
代码中找到它:
angular.forEach($scope.Filters[0].filters, function(filter) {
即。你只检查第一组。您需要使用其他级别的嵌套,例如:
angular.forEach($scope.Filters, function (filtersGroup) {
angular.forEach(filtersGroup.filters, function(filter) {
// etc
问题2,我不确定你现在要做什么。
<li ng-model="activeFilter.checked" ng-click="removeFilter(ModifyFilter(activeFilter.checked,activeFilter))">
这里注意到的事情:
removeFilter
功能,只有removeSingleFilter
ModifyFilter
函数不返回任何内容,可以用作另一个函数的参数。activeFilter.checked
之前,您不会将ModifyFilter
更改为false - &gt; ModifyFilter
尝试将activeFilter
的另一个副本推送到$scope.ActiveFilters
,从而导致重复错误:
“错误:[ngRepeat:dupes]不允许在转发器中使用重复项。使用'track by'表达式指定唯一键.Repeater:ActiveFilters中的activeFilter,Duplicate key:object:00E
activeFilter.checked
设置为false,然后仅调用ModifyFilter
(这可能不是函数的最佳名称,但无论如何它的工作都很好)。这是一种天真的方法:
<li ng-model="activeFilter.checked" ng-click="activeFilter.checked = !activeFilter.checked; ModifyFilter(activeFilter.checked,activeFilter)"
但也许使用一个函数可能更干净,像这样:
$scope.deactivateFilter = function (filter) {
filter.checked = !filter.checked;
$scope.ModifyFilter(filter.checked, filter);
};
并像这样使用它:
<li ng-model="activeFilter.checked" ng-click="deactivateFilter(activeFilter)">
最后,我或许也可以重构你的ModifyFilter
函数,只需要在函数内只选择一个参数filter
,然后选择filter.checked
。
关于你的第三个问题:真的不能说。有了这些修复,我认为这种方法没有任何大问题。但是不要把我的话当作理所当然......:)