Angularjs ng鼠标不在内部工作ng重复

Angularjs ng鼠标不在内部工作ng重复,angularjs,ng-repeat,Angularjs,Ng Repeat,ng mouseenter在我的ng repeat内不起作用,它只在我的ng repeat外起作用。你能解释一下这里发生了什么吗 ng重复{{i} 在重复之外 n:{{n}} 使用ng repeat时,会在其中创建一个作用域。如果要在父作用域中打印n,请在ng repeat中使用$parent修改父作用域: ng mouseenter=“$parent.n=$parent.n+1”这与ng mouseenter无关,而是范围问题。在ng repeat内部时,您只是更新每个重复元素的child

ng mouseenter在我的ng repeat内不起作用,它只在我的ng repeat外起作用。你能解释一下这里发生了什么吗

ng重复{{i}

在重复之外

n:{{n}}
使用ng repeat时,会在其中创建一个作用域。如果要在父作用域中打印n,请在ng repeat中使用$parent修改父作用域:
ng mouseenter=“$parent.n=$parent.n+1”

这与
ng mouseenter
无关,而是范围问题。在ng repeat内部时,您只是更新每个重复元素的childscope,如果您想更新对象的属性(在控制器作用域上),则无法在外部获得它。看看这个,但是你到底想做什么?你需要跟踪每一项的鼠标指针吗?或者ng中的所有内容都作为一个整体重复?谢谢,它使用对象工作,我完全忘记了控制器继承问题…:/在我看来,使用$parent是一种不好的做法。。如果你想更新祖父母的值或gp的父母的值,你会去
parent.parent.etc
,这很糟糕。@PSL你可能是对的。有很多方法可以访问父作用域,这个答案有几个值得注意的地方,ng如果应用在同一个元素上,也会创建自己的作用域。是的,父级。父级[…]是错误代码的标志。我认为在这种情况下使用$parent是有效的。不需要塞满控制器。当您在已经有ng repeat或ng if的元素上使用mouseenter和mouseleave时,需要向上一级。可能还有其他一些指令需要使用$parent。花了我一段时间,我觉得有些东西坏了。我认为$parent是这个问题的正确答案,因为它简洁地告诉我们为什么代码不起作用:您的var在另一座城堡中。如何和为什么不使用$parent重构代码是一个单独的SO问题。
<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>