2014-09-14 3 views
3

ng-mouseenter가 ng-repeat에서 작동하지 않으며, 외부에서만 작동합니다. 여기서 일어나는 일을 설명해 주시겠습니까? http://plnkr.co/edit/BklqI09raI18RAaqmca2?p=previewng-mouseenter가 ng-repeat 내부에서 작동하지 않습니다.

<p ng-repeat="i in [1,2]" ng-init="n=0"> 
<span ng-mouseenter="n = n + 1">ng-repeat {{i}}</span> 
</p> 
<p><span ng-mouseenter="n = n + 1">Outside the repeat</span></p> 
<pre>n : {{n}}</pre> 
+0

이것은 ng-mouseenter와는 아무런 관련이 없습니다. 대신 범위 문제입니다. ng-repeat 내부에서 반복 된 각 요소의 자식 범위를 업데이트하는 중입니다. 컨트롤러 범위에있는 개체의 속성을 업데이트하려는 경우 외부에 가져 오지 않습니다. 이 http://plnkr.co/edit/kTB6qY?p=preview를 확인하십시오. 정확히 각 항목에 대한 마우스 포인트를 추적해야합니까? 또는 전체로서의 반복의 모든 것? – PSL

+0

컨트롤러 상속 문제를 완전히 잊어 버린 객체를 사용해 주셔서 감사합니다. :/ – user2026038

답변

3

ng-repeat를 사용하면 해당 범위가 만들어집니다. 부모 범위에서 n을 인쇄하려면 ng-repeat에서 $ parent를 사용하여 부모를 수정하십시오. ng-mouseenter="$parent.n = $parent.n + 1"

+0

$ parent를 사용하는 것은 나쁜 습관입니다. imaging .. 조상의 값이나 gp의 부모 값을 업데이트하려면 implements parent.parent .etc' 그것은 나쁘다. – PSL

+1

@PSL 아마 맞을 것입니다. 상위 범위에 액세스하는 데는 여러 가지 방법이 있습니다.이 답변에는 여러 가지가 있습니다. http://stackoverflow.com/a/21454647/2819527 –

+0

동일한 요소에 ng-if를 적용하면 자체 범위가 만들어집니다. 예, parent.parent [...]는 잘못된 코드의 표시입니다. 나는 $ parent를 사용하는 것이이 경우에 유효하다고 생각한다. 컨트롤러를 채울 필요가 없습니다. 이미 ng-repeat 또는 ng-if가있는 요소에서 mouseenter 및 mouseleave를 사용하는 경우 한 단계 위로 작업해야합니다. $ parent를 사용해야하는 다른 지시문이있을 수 있습니다. 잠시 나 뭔가가 망가 졌다고 생각 했어. –

관련 문제