2016-09-05 4 views
6

4つの部分を持つアコーデオンでデータをフィルタリングする必要があります。私のコードのサンプルは、(私はacordeonコードと私のコードでは、いくつかの異なる部分をクリアした)以下であるAngularJSを使用した複数の定義リストでの複数の配列のフィルタリング

<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> 

サブカテゴリ、レッスンとSubLesson件のデータが別のサービスから来ていると、彼らは異なるアレイに保存されています。

このビューのデータをフィルタリングしたいのですが、すべてのデータが含まれています。しかし、私がsubLessonパート(最下位カテゴリー)に何か言葉を書くと、アコーデオンを開いてサブレロンのデータに到達するために親部品(html要素)を参照する必要があります。

このようなフィルタを作成できますか?すべてのデータは、JSON形式のWebサービスから取得されます。私はajaxの待ち時間を考慮する必要があります。

答えて

3

AFAIK、filterパイプは、無限の深さでオブジェクトのすべてのプロパティを検索します。

は、したがって、あなたがもし、あなたが持っている場合にのみ、すべてのあなたのmainCategoriesオブジェクトに含まれるsubCategoriesなどに、最初のNGリピートで、最初のコレクション、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"> 
+0

私が言うのを忘れて、サブカテゴリ、レッスンとSubLesson件のデータがから来ています別のサービスと彼らは別の配列を保存されます。私は私の質問にこれを追加するつもりです。そのために残念。 – Sam

+0

@Sam私はそれを得ましたが、あなたはそれらをマージしてネストする必要があります - 単純なループがトリックを行います。 AFAIK、あなたは他の選択肢がありません – Bigood

+0

ああ私は今それを見る。私はこれを試してみるつもりです。ありがとう。 – Sam

関連する問題