Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 为什么ng repeat指令创建子作用域?_Angularjs_Angularjs Ng Repeat - Fatal编程技术网

Angularjs 为什么ng repeat指令创建子作用域?

Angularjs 为什么ng repeat指令创建子作用域?,angularjs,angularjs-ng-repeat,Angularjs,Angularjs Ng Repeat,问题:为什么ng repeat指令创建子作用域 我不明白为什么会这样。如果您显式地创建一个子控制器,那么创建一个新的作用域在某种程度上是有意义的,但是为什么它会为每个ng重复自动创建一个呢 我想它让我困惑的原因是,如果在JS中创建一个循环,这并不意味着循环外的代码不能访问其中的任何变量 例如: for(var x=0; x<10; x++) { var y = x } alert(y); for(var x=0;xFrom)(我的重点是): ngRepeat指令对一个模板中的每个项

问题:为什么ng repeat指令创建子作用域

我不明白为什么会这样。如果您显式地创建一个子控制器,那么创建一个新的作用域在某种程度上是有意义的,但是为什么它会为每个ng重复自动创建一个呢

我想它让我困惑的原因是,如果在JS中创建一个循环,这并不意味着循环外的代码不能访问其中的任何变量

例如:

for(var x=0; x<10; x++) {
   var y = x
}
alert(y);
for(var x=0;xFrom)(我的重点是):

ngRepeat指令对一个模板中的每个项目实例化一次模板 每个模板实例都获得自己的作用域,其中 循环变量设置为当前集合项,并设置$index 指向项索引或键

看起来很简单,不是吗?

来自(我强调):

ngRepeat指令对一个模板中的每个项目实例化一次模板 每个模板实例都获得自己的作用域,其中 循环变量设置为当前集合项,并设置$index 指向项索引或键


看起来很简单,不是吗?

Javascript是由一个人在10天内编写的。在几乎所有其他语言中,循环都会创建一个单独的作用域,您的代码示例将无法编译,或者您的最后一行中y的值将为null/none。

Javascript是由一个人在10天内编写的。在几乎所有其他语言中年龄,循环创建一个单独的作用域,您的代码示例将无法编译,或者您的最后一行中y的值将为null/none。

DOM不是javascript。您要重复的集合中的项需要绑定到单独的作用域,这些作用域绑定到重复的DOM元素,并创建一个作用域树r页面结构(略)

例如,此标记:

<body ng-app="myapp">
    <div ng-repeat="item in items">
        <p>{{ item.name }}</p>
    </div>
</body>

(略为近似说明)

DOM不是javascript。您要重复的集合中的项需要绑定到单独的作用域,这些作用域绑定到重复的DOM元素,并创建一个作用域树,该作用域树反映页面的结构(略为)

例如,此标记:

<body ng-app="myapp">
    <div ng-repeat="item in items">
        <p>{{ item.name }}</p>
    </div>
</body>

(略为近似以供说明)

它会创建一个独立的新作用域而不是子作用域。您不能从父作用域继承。for循环和ng repeat是不同的概念,因为ngRepeat会在每次迭代中实例化模板,而for循环则不会。的定义会清楚地说明这一点。JavaScript确实没有块作用域变量。它会创建一个独立的新scope而不是子作用域。您不能从父作用域继承。for循环和ng repeat是不同的想法,因为ngRepeat每次迭代都实例化模板,而for循环没有。的定义会让它变得清晰。JavaScript确实没有块作用域变量。我知道它创建了自己的作用域,但我只是尝试一下ng理解为什么。为什么作为一个问题没有意义。你可以问为什么,上面的一段解释了它。我理解它创造了它自己的范围,但我只是想理解为什么。为什么作为一个问题没有意义。你可以问什么,上面的一段解释了它。为l创建一个新的范围有什么好处oops?@glandrum101-不仅仅针对循环。针对任何块。它提高了作用域粒度。在使用垃圾收集的语言中,允许更早地进行处理。@PM77-1这很有意义,我想在创建新的块/作用域时,如果不得不担心其他同级块/作用域变量名是什么,那将是一场噩梦,因为您不会这样做能够有重复的变量名,否则父作用域将无法解析这些引用。为循环创建新作用域的好处是什么?@glandrum101-不仅仅是为循环。对于任何块。它提高了作用域的粒度。在使用垃圾回收的语言中,允许提前处理。@PM77-1我想这是有意义的每当您创建一个新的块/作用域时,必须担心每个其他同级块/作用域变量名是什么,这将是一场噩梦,因为您将无法拥有重复的变量名,否则父作用域将无法解析这些引用。这是有意义的,我想我不认为它需要匹配scop我想允许从作用域中访问parent->children可能会导致解析变量名的问题,因为两个不同的子作用域可能具有相同的变量名,它将无法解析它。而从child->parent进行解析并不是每一个都会导致问题。这是有意义的,我想我没有我不认为它需要将作用域与DOM的结构相匹配。我猜允许从作用域中访问父->子作用域可能会导致解析变量名的问题,因为两个不同的子作用域可能具有相同的变量名,并且它无法解析。而从子->父作用域进行访问并不会导致所有变量名的错误问题