0

首先对不起我的英语。我的问题是:

我有这个简单的代码:

<li ng:repeat="item in menu.items" ng:class="getMenuItemClass(item)"> 
<a ng:href="#{{item.url}}">{{item.label}}</a>
</li>

这是我的getMenuItemClass:

scope.getMenuItemClass = function(item) {
   console.log(item)
   var hashPath = $location.hashPath || '/';
   if (hashPath === item.url) {
      return 'selected';
   }
   return '';
};

这是准备好的示例,我不知道为什么,但在我的实际应用程序中它是一式三份的!:0 如果我犯了错误,有人可以向我解释吗?

http://jsfiddle.net/h7yKr/44/

我已将 jsfddle 更新为 angular 的最新版本,现在它是一式四份!观看它 http://jsfiddle.net/h7yKr/46/

编辑澄清:问题是调用 getMenuItemClass() 的次数比需要的次数多得多,尝试打开 jsfiddle 并打开浏览器控制台并查看 console.log!

4

1 回答 1

0

Angular 可以在一个周期内多次评估一个表达式digest,因此函数的执行会一次又一次地发生。

文档here中所述

Angular 进入 $digest 循环。该循环由两个较小的循环组成,它们处理 $evalAsync 队列和 $watch 列表。$digest 循环不断迭代,直到模型稳定,这意味着 $evalAsync 队列为空,$watch 列表没有检测到任何变化。

由于您 $watch 表达式是一个函数,因此可以多次调用它。

或者查看$route服务中的$routeChangeStart事件。您可以订阅此活动。在您的范围内创建一个变量并绑定到该变量ng-class

于 2013-06-25T15:34:37.100 回答