2016-04-05 12 views
0

親リストには、リストをクリックすると表示されるチェックボックスのドロップダウンがあります。私がしたいのは、いずれかのチェックボックスがチェックされている場合、親リストクラスに「アクティブ」を与えることです。私は複数のリストを持っているので、チェックボックスがオンになっていると、アクティブなクラスを取得するためのチェックボックスのみが必要なときに、すべてのリストがそのクラスを取得します。これをどのようにリファクタリングすれば、すべてのリストではなく、親リストに「アクティブ」クラスだけが与えられますか?Angularを使用してチェックボックスをクリックした場合、親要素にng-classを適用しますか?

HTML:

<ul ng-repeat="type in filterTypes"> 
    <li ng-repeat="filter in type.filters" ng-class="{active:checked}">{{filter.value | uppercase}} 
     <ul> 
      <li ng-repeat="option in filter.options"> 
       <label> 
        //if any checkbox is checked, the active class should be given to the parentd list at the way top. 
        <input type="checkbox" ng-model="checked"/> 
        {{option}} 
       </label> 
      </li> 
     </ul> 
    </li> 
</ul> 

指令:

return { 
    restrict: "E", 
    templateUrl: 'scripts/directives/all-filters.html', 
    link: function(scope, el, attr) { 
     scope.filterTypes = dummyData.filters; 
    } 
} 
+0

変更' checked'を返す場合は、アクティブなクラスを適用チェックする機能。モデルとクラスのディレクティブで「チェック」されます。 –

+0

@JamesBuckこれにより、すべてのチェックボックスがチェックされます(true)。 –

答えて

1

ng-model="option.checked"

にモデルを変更することにより、各オプションにチェックするプロパティを適用するとli要素に変更ng-classフィルタ内のいずれかのオプションが

$scope.isAnyChecked = function(filter) { 
    for (var i = 0; i < filter.options.length; i++) { 
     if (filter.options[i].checked) { 
      return true; 
     } 
    } 
    return false; 
} 

をチェックされている場合には、フィルタ `に真

ng-class="isAnyChecked(filter) ? 'active' : ''" 
+0

フィルタに「checked」というプロパティがない場合に、そのフィルタがチェックされているかどうかをチェックする方法を教えてください。このエラーが発生しました: 'filter1'という文字列で 'checked'というプロパティを作成できません –

+0

@ user5694093 'options'を文字列の配列ではなくオブジェクトの配列に変更してください。それが不可能な場合は、各チェックボックスのモデル値を保存し、それに応じて 'isAnyChecked'関数を調整するより新しいフィルタを作成する必要があります。 –

+0

ありがとう!私はオプションをオブジェクトにしました。今はうまくいきます。これが最も適切な角度の方法だとお考えですか? –

0

<input ng-model='checked' ng-change='filter.checked=checked'/>

+0

もう1つのチェックボックスをクリックするとすぐに、 "checked"の値がfalseに変わり、 "active"というクラスが消えるため、これは機能しません。ボックスの1つがチェックされている限り、クラスを「アクティブ」にしておきたいと思います。 –

関連する問題