サブ要素が特定の基準に一致するかどうかに応じて、css クラスをリストの項目に設定したいと考えています。構造は次の例のようになります。
<ul ng-controller="Navigation">
<li><a href="#">Category A</a>
<ul>
<li><a href="a1.html">a1</a></li>
<li><a href="a2.html">a2</a></li>
</ul>
</li>
<li><a href="#">Category B</a>
<ul>
<li><a href="b1.html">b1</a></li>
<li><a href="b2.html">b2</a></li>
</ul>
</li>
<li><a href="contact.html">contact</a></li>
</ul>
私のモデルは現在のページa2.html
です。リンクがhref
モデル値と同じ属性を持つ場合、特定の css クラス ( active
) を持つ必要があります。これは、次の式で行うことができます。
<a href="a1.html" ng-class="{'active': currentPage == 'a1.html'}>
しかし、ファイル名 ( ) を繰り返す必要があるため、これは少し洗練されていませんa1.html
。現在の要素を関数に渡すことは可能でしょうか? このようなもの:ng-class="getClass(currentElement)"
次の問題は、子がクラスを持っているかどうかに応じて親要素を選択したいということですactive
。<a href="a1.html">a1</a>
上記の例で が選択されている場合はCategory A
、クラスactive
も取得する必要があります。
結論
stewie のソリューションは機能しますが、Angular はこの仕事に最適なツールではないという結論に達しました。これは Web 'アプリケーション' (Angular のドメイン) ではなく、少し強化する必要がある静的な html です。
この単純な jQuery スニペットがその役割を果たします。
var activeLink = $("a").filter(function() {
return $(this).attr("href") == currentPage();
});
activeLink.addClass("active");
activeLink.parents("li").children("a").addClass("active");