Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度:ng中继器中的ng类,重复呼叫_Javascript_Angularjs_Duplicates_Ng Repeat_Ng Class - Fatal编程技术网

Javascript 角度:ng中继器中的ng类,重复呼叫

Javascript 角度:ng中继器中的ng类,重复呼叫,javascript,angularjs,duplicates,ng-repeat,ng-class,Javascript,Angularjs,Duplicates,Ng Repeat,Ng Class,首先为我的英语感到抱歉。 我的问题是: 我有一个简单的代码: <li ng:repeat="item in menu.items" ng:class="getMenuItemClass(item)"> <a ng:href="#{{item.url}}">{{item.label}}</a> </li> 这是一个现成的例子, 我不知道为什么,但在我的实际应用程序中,它是一式三份的!:0 如果我犯了错误,有人能给我解释一下吗 我已经将JSFDL

首先为我的英语感到抱歉。 我的问题是:

我有一个简单的代码:

<li ng:repeat="item in menu.items" ng:class="getMenuItemClass(item)"> 
<a ng:href="#{{item.url}}">{{item.label}}</a>
</li>
这是一个现成的例子, 我不知道为什么,但在我的实际应用程序中,它是一式三份的!:0 如果我犯了错误,有人能给我解释一下吗

我已经将JSFDLE更新到angular的最新版本,现在已经是四份了! 小心

编辑以澄清: 问题在于getMenuItemClass()是 比要求的次数多得多,
尝试打开JSFIDLE,打开浏览器控制台并查看console.log

Angular可以在
摘要
循环中多次计算表达式,因此函数的执行会一次又一次地进行

如本文所述

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

因为$watch表达式是一个函数,所以可以多次调用它

或者查看服务中的
$routeChangeStart
事件。 您可以订阅此活动。
在你的作用域上创建一个变量,并将
ng类
绑定到该变量

我没有看到任何三倍或四倍-我只看到两个菜单选项,Home和Alt。你能进一步澄清吗?对不起!没错,问题是getMenuItemClass()的调用次数比所需次数多得多,请尝试打开JSFIDLE并打开浏览器控制台并查看console.log!
scope.getMenuItemClass = function(item) {
   console.log(item)
   var hashPath = $location.hashPath || '/';
   if (hashPath === item.url) {
      return 'selected';
   }
   return '';
};