我已经建立了一个动态菜单,它也有突出显示。
现在我遇到了一个问题,路径更改事件的数量随着菜单元素的增加而增加。
当然,这是对菜单的每个元素应用指令的结果。
目前自定义指令是我最薄弱的地方,我不知道如何重构这一切。
我还尝试将指令放在菜单 (ul) 的根元素中以便注册一次 watch,但坚持访问深层子元素 (ul->li->a.href)。
这是指令:
app.directive("testdir", function($location)
{
return {
restrict: 'A',
link: function(scope, element, attrs, controller) {
scope.$watch(function() { return $location.path(); }, function(path)
{
scope.$parent.firedEvents++;
path=path.substring(1);
if(path === element.children().attr("href").substring(2))
{
element.addClass("activeLink");
}
else
{
element.removeClass("activeLink");
}
})
}
};
和 HTML 部分:
<ul ng-app="test" ng-controller="MenuCtrl">
<li ng-repeat="link in menuDef" testdir><a href="{{link.url}}">{{link.linkName}}</a></li>
</ul>
JsFiddle 上的完整示例
如何重构?我累极了。
而且,我正朝着正确的方向前进?我有一种感觉,这件事可以以更简单的方式完成,但也许我错了。