使用AngularJS过滤多个定义列表中的多个数组

时间:2016-09-05 09:08:40

标签: javascript angularjs filter

我想在一个有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延迟。

1 个答案:

答案 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">