我想将 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 不是这项工作的最佳工具。它不是一个网络“应用程序”(Angular 的领域),而是静态 html,应该稍微丰富一下。
这个简单的 jQuery 片段可以完成这项工作:
var activeLink = $("a").filter(function() {
return $(this).attr("href") == currentPage();
});
activeLink.addClass("active");
activeLink.parents("li").children("a").addClass("active");