【发布时间】:2013-06-17 16:11:51
【问题描述】:
我已经建立了一个动态菜单,它也有突出显示。
现在我遇到了一个问题,路径更改事件的数量随着菜单元素的增加而增加。
当然,这是在菜单的每个元素上应用指令的结果。
目前自定义指令是我最薄弱的地方,我不知道如何重构所有这些。
我还尝试将指令放在菜单 (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>
整个例子on JsFiddle
如何重构?我已经筋疲力尽了。
而且,我正朝着正确的方向前进?我有一种感觉,这件事可以用更简单的方式完成,但也许我错了。
【问题讨论】:
标签: events angularjs menu watch