我想在一个有4个部分的acordeon中过滤数据。我的代码示例如下(我在代码中清除了acordeon代码和一些不同的部分)
<input type="text" ng-model="searchText" placeholder="Filter">
<dl>
<dt ng-repeat-start="mainCategory in mainCategories | filter:searchText" >
{{mainCategory.Name}}
</dt>
<dd ng-repeat-end="">
<dl>
<dt ng-repeat-start="subCategory in subCategories[mainCategory.ID] | filter:searchText" >
{{subCategory.Name}}
</dt>
<dd ng-repeat-end="">
<dl>
<dt ng-repeat-start="lesson in subCategoryLessons[subCategory.ID] | filter:searchText" >
{{lesson.Name}}
</dt>
<dd ng-repeat-end="">
<dl>
<dt ng-repeat-start="subLesson in subLessons[lesson.ID] | filter:searchText">
{{subLesson.Header}}
</dt>
<dd ng-repeat-end="">
{{subLesson.Content}}
</dd>
</dl>
</dd>
</dl>
</dd>
</dl>
</dd>
</dl>
SubCategory,Lesson和SubLesson数据来自另一个服务,它们保存在不同的数组中。
我想在此视图中过滤数据包括所有数据。但是如果我在subLesson部分(最低类别)中写了一些单词,我必须通过打开acordeon看到父部分(html元素)到达sublesson数据。
我可以创建这样的过滤器吗?所有数据都来自具有JSON格式的Web服务。我必须考虑ajax延迟。
答案 0 :(得分:3)
AFAIK,filter
管道将搜索对象的所有属性,并具有无限深度。
因此,您可以将过滤器应用于第一个ng-repeat中的第一个集合mainCategories
,当且仅当您subCategories
中包含mainCategories
时}对象,等等。
例如,您的数据将如下所示:
mainCategories = [{
subCategories : [{
lessons : [{
subLessons : [{
...
}]
...
}]
...
}]
...
}]
你会像这样使用它:
<dt ng-repeat-start="mainCategory in mainCategories | filter:searchText" >
{{mainCategory.Name}}
</dt>
<dd ng-repeat-end="">
<dl>
<dt ng-repeat-start="subCategory in mainCategory.subCategories">