我有一个内容列表,它有两个级别。我的数据已经排序,所以我只是迭代它来显示它。所以我有这个
Category 1
Subcategory1
Item1
Item2
Subcategory2
Item3
Item4
Subcategory3
Item5
Item6
Subcategory4
Item7
Item8
Category 2
Subcategory1
Item9
Item10
Subcategory2
Item11
Item12
等等。我还有一个文本过滤器,因此您可以根据标题和标签输入文本和我的内容列表过滤器。一切正常。我想要做的是隐藏类别2中的子类别1,如果过滤器排除了Item9和Item10。我有2500件物品,它已经有点慢了。而不是再次计算项目,我想在过滤它们时计算它们。这意味着当过滤器启动时,我需要重置我的列表,然后在找到项目时进行计数。我有两个控制器,父项中有文本框,子项用于每个项目,因为我读的比使用过滤器更快(因为过滤器从DOM中删除了东西)。我还不确定它是否属实,我正在试验。与此同时,这是在父控制器中:
$scope.doFilter = function()
{
for (var c = 0; c < $scope.categories.length; ++c)
{
var categoryId = $scope.categories[c].Id;
for (var r = 0; r < $scope.regions.length; ++r)
{
var regionId = $scope.regions[r].Id;
$scope.showRegions[String(categoryId) + String(regionId)] = 0;
}
}
$scope.$broadcast("triggerFilters", {});
}
然后这是我在子控制器中搜索方法的底部:
if (!excluded)
{
var key = String($scope.item.CategoryId) + String($scope.region.Id);
if ($scope.$parent.showRegions[key] == null)
$scope.$parent.showRegions[key] = 0;
$scope.$parent.showRegions[key]++;
}
请记住,有一个这个子控制器的实例,对于每个元素,它都是这样的(这是一个减少版本,为了便于阅读):
<div data-ng-repeat="category in fullList">
<a>{{category.Name}}</a>
<div >
<div data-ng-repeat="region in regions | orderBy: 'Name'">
{{region.Name}}
<div >
<ul>
<li ng-controller="filterController" ng-hide="isExcludedByFilter"
data-ng-repeat="item in category.regions[region.Name].items | orderBy: 'Name'">
{{item.Name}}
</li>
</ul>
</div>
</div>
</div>
</div>
因此,当我在Chrome中设置断点时,我可以看到我的项目计数集合在增长。但Chrome中的Angular检查员会冻结(也许是因为我有2500个控制器?)如果我在推送搜索时调用的方法设置了一个断点,那么这些集合都会再次为空。因此,我尝试添加过滤器,但是如果我添加了一个ng-hide,则列表永远不会显示,因为该集合始终为空,尽管它会在搜索发生时填满。
我使用的是$ parent,因为每个项目都有它自己的控制器,我想如果你修改了父项,你会得到一个本地副本。所以,这显然是有效的,但是当搜索结束时价值正在消失,我不知道为什么。
感谢您寻找
答案 0 :(得分:0)
好的 - 我把它排除了。 Angular在每个范围的级别维护变量,因此子范围继承了一个值,但是如果在子级别更改它,则父级别将保持不变,除非您使用$ scope。$ parent。随着我对Angular的了解越来越多,我的项目也在不断发展。我没有完全意识到我的数据项有两个嵌套的范围。所以,我需要更改$ scope。$ parent,$ scope。$ parent。$ parent,一切都很好。现在我只需要弄清楚为什么它这么慢......