AngularJS - 在层次结构中使用相同的控制器是否使用单独的范围

时间:2014-04-16 23:23:33

标签: angularjs angularjs-scope

当您在DOM层次结构中使用与下面相同的控制器时,每个控制器是否都给出了自己的范围/状态?

<div ng-controller="EventController">
  Root scope <tt>MyEvent</tt> count: {{count}}
  <ul>
    <li ng-repeat="i in [1]" ng-controller="EventController">
      <button ng-click="$emit('MyEvent')">$emit('MyEvent')</button>
      <button ng-click="$broadcast('MyEvent')">$broadcast('MyEvent')</button>
      <br>
      Middle scope <tt>MyEvent</tt> count: {{count}}
      <ul>
        <li ng-repeat="item in [1, 2]" ng-controller="EventController">
          Leaf scope <tt>MyEvent</tt> count: {{count}}
        </li>
      </ul>
    </li>
  </ul>
</div>

我无法弄清楚事件广播在此示例http://docs.angularjs.org/guide/scope

中的工作原理

此致

1 个答案:

答案 0 :(得分:0)

是的,每个控制器实例都有自己的范围。所以在这种情况下你有4个范围 它们的组织方式如下:
- 根范围
----中间范围
------叶子范围
------叶子范围
在这个例子中事件广播如何工作:
- 当您按下广播按钮时,事件将发送到子范围。由于广播按钮位于中间范围,因此在中间范围调用$ broadcast,并将事件发送到两个叶子范围。它也被发送到发件人,即中间范围 - 当您按下“发射”按钮时,事件将发送到父作用域。同样,emit按钮位于Middle范围内,事件将被发送到其父范围Root。事件也发送给发件人,即中间范围。