2013-06-25 3 views
0

먼저 내 영어로 유감입니다. 나는이 간단한 코드했습니다각 : ng-repeater의 ng 클래스, 중복 호출

: 내 문제가

<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를 업데이트했습니다, 그리고 지금은 사통이야! 는 http://jsfiddle.net/h7yKr/46/

편집 clarication을 감시 : 문제가 getMenuItemClass() 이 jsfiddle을 열고 브라우저 콘솔을 열고을 console.log를 볼 필요 시도 후 더 많은 배라고한다는 것입니다!

+0

3 배나 2 배가되는 것이 보이지 않습니다. 홈 및 Alt의 두 가지 메뉴 옵션이 있습니다. 더 명확히 할 수 있습니까? – blaster

+0

운영 체제 죄송합니다! 당신 말이 맞아 문제는 getMenuItemClass() 은 jsfiddle을 열고 브라우저 콘솔을 열고 console.log를 보면서 더 많은 시간이 필요하다는 것입니다! – justBorn

답변

0

각도는 digest주기 동안 표현식을 여러 번 평가할 수 있으므로 함수 실행이 반복됩니다.

바와 같이 각도가 $ 다이제스트 루프 입사 여기

documentation 설명. 루프는 $ evalAsync 큐와 $ watch리스트를 처리하는 두 개의 더 작은 루프로 구성됩니다. $ digest 루프는 모델이 안정화 될 때까지 계속 반복합니다. 즉, $ evalAsync 대기열이 비어 있고 $ watch 목록에서 변경 사항을 감지하지 못합니다.

$ watch식이 여러 번 호출 될 수있는 함수이기 때문에.

$routeChangeStart 이벤트를 $route 서비스에서 확인하십시오. 이 이벤트에 가입 할 수 있습니다. 범위에 변수를 만들고 해당 변수에 바인딩을 지정하십시오.

+0

네, $ digest 루프였습니다. 나는 그것을하기위한 방법을 변경했습니다;) – justBorn