问题:为什么ng-repeat指令会创建子范围?
我不明白为什么会这样。如果你明确地创建一个子控制器,创建一个新范围在某种程度上是有意义的,但为什么它会为每个ng-repeat自动创建一个?
我想它之所以让我困惑的原因是因为如果你在JS中创建一个循环,那并不意味着循环外的代码无法访问其中的任何变量。
示例:
for(var x=0; x<10; x++) {
var y = x
}
alert(y);
答案 0 :(得分:2)
来自the docs(我强调):
ngRepeat指令从a中为每个项目实例化一次模板 采集。每个模板实例获得自己的范围,其中给定 loop变量设置为当前集合项,并设置$ index 到项目索引或键。
看起来很简单,不是吗?
答案 1 :(得分:1)
Javascript是由一个人在10天内编写的。在几乎所有其他语言中,循环创建一个单独的范围,您的代码示例将无法编译,或者您的最后一行中的y最终为null / none。
答案 2 :(得分:1)
DOM不是javascript。您ng-repeat
集合中的项目需要绑定到绑定到重复DOM元素的单独作用域,并创建一个镜像树结构树(有点)
ex,这个标记:
<body ng-app="myapp">
<div ng-repeat="item in items">
<p>{{ item.name }}</p>
</div>
</body>
会产生类似左边的DOM和右边的范围:
body rootScope
div scope
p
div scope
p
(有点近似于插图)