是否仅为新范围插入了ng-scope?

时间:2013-12-18 23:29:19

标签: angularjs

这听起来有点愚蠢。但是我在理解是否仅在创建新范围时插入'ng-scope'类时遇到了问题,还是其他问题?

示例:我将这些代码行链接到控制器:

<button class="btn" ng-click="open()">Open me!</button>
<div ng-show="selected">Selection from a modal: {{ selected }}</div>

在Web控制台中,两者都有一个ng-scope:

<button class="btn ng-scope" ng-click="open()">Open me!</button>
<div ng-show="selected" class="ng-scope ng-binding ng-hide">Selection from a modal: </div>

即使没有特定于角度的数据,就像这里一样,它会添加一个ng-scope:

<div>hello</div>

输出

<div class="ng-scope">hello</div>

但为什么??

2 个答案:

答案 0 :(得分:13)

任何有附加范围的地方。来自the documentation

  

请注意,Angular会自动将ng-scope类放在元素上   附加范围的地方。此示例中的定义   新的范围位置以红色突出显示。儿童范围是   必要的,因为转发器评估{{name}}表达式,但是   取决于它生成的表达式的评估范围   不同的结果。

this answer中,@ MarkRajcok表示angular使用这些来跟踪范围(以及垃圾收集)。

编辑: 并回答您编辑过的问题。不,这不会添加ng-scope类:

<div>hello</div>

Here is a plunker看到这一点。

注意ng-scope类如何仅应用于声明ng-controller的节点。

<div ng-controller="Ctrl" class="ng-scope">
  <div>hello2</div>
</div>

答案 1 :(得分:-1)

每当我们在创建角度模块时指定依赖注入

  

(angular.module( '对myApp',的 [] ))

,然后只会添加class =“ng-class”     <body ng-app="myApp "ng-controller="myCtrl" class="ng-class">。如果我们不指定DI(angular.module('myApp');)则不会添加class =“ng-class”。这是<body>元素的情况。但除<body>元素外,每当我们为任何html元素/标签编写ng-controller指令时,都会添加class =“ng-scope”。例如。 <div ng-controller="myDiv"></div>。输出为<div class="ng-scope"></div>