为什么ng-repeat指令会创建子范围?

时间:2014-07-25 00:52:16

标签: angularjs angularjs-ng-repeat

问题:为什么ng-repeat指令会创建子范围?

我不明白为什么会这样。如果你明确地创建一个子控制器,创建一个新范围在某种程度上是有意义的,但为什么它会为每个ng-repeat自动创建一个?

我想它之所以让我困惑的原因是因为如果你在JS中创建一个循环,那并不意味着循环外的代码无法访问其中的任何变量。

示例:

for(var x=0; x<10; x++) {
   var y = x
}
alert(y);

3 个答案:

答案 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

(有点近似于插图)