【问题标题】:Can't understand which scope will be associated with DOM node无法理解哪个范围将与 DOM 节点相关联
【发布时间】:2015-05-23 14:39:50
【问题描述】:

当你将任何控制器附加到 DOM 节点时,例如,

<div ng-controller="myController">{{testProperty}}</div>

控制器范围将与此 DOM 节点相关联。 想象另一个例子。我们创建了指令 myDirective,它有自己的独立作用域。现在我们有

<div ng-controller="myController" myDirective>{{testProperty}}</div>

在这种情况下,哪个范围将与 DOM 节点相关联?控制器或指令的范围?最后一个例子,我们还有一个指令 mySecondDirective 有它自己的隔离 范围

<div myDirective mySecondDirective>{{testProperty}}</div>

在这种情况下,哪个范围将与 DOM 节点相关联? myDirective 或 mySecondDirective 的范围?你能解释一下原因吗?

【问题讨论】:

    标签: angularjs angularjs-scope


    【解决方案1】:

    &lt;div myDirective mySecondDirective&gt;{{testProperty}}&lt;/div&gt;

    对于multiple directives defined on a single DOM element,您可以显式定义priority: - 请参阅:https://docs.angularjs.org/api/ng/service/$compile#directive-definition-object


    &lt;div ng-controller="myController" myDirective&gt;{{testProperty}}&lt;/div&gt; 在这种情况下,哪个范围将与 DOM 节点相关联?范围 控制器还是指令?

    for controller's $scope and a directive's scope defined on a single DOM element:
    "transclude 选项改变了作用域的嵌套方式。它使得被嵌入指令的内容具有指令之外的任何作用域,而不是其上的任何作用域内部。这样做时,它使内容可以访问外部范围。”从这里找到的 angularjs 文档:https://docs.angularjs.org/guide/directive#creating-a-directive-that-wraps-other-elements

    【讨论】:

      【解决方案2】:

      谢谢,但你们都错了。我发现不可能在一个 DOM 节点上创建两个或多个范围。 Angular 抛出这个错误:

      Error: [$compile:multidir] Multiple directives [pTest2, pTest] asking for new/isolated scope on: <p-test p-test2="">
      

      【讨论】:

      • 所以我发布的答案直接来自 angularjs 文档。也许您应该发布整个代码,因为您的实现可能会导致与其他内容发生冲突,或者您可能发现了一个错误,谁知道 - 而不是说“你们所有人都错了”?哈哈。显然,如果您使用的是ng-repeat(未在原始帖子中显示),则可能会引起一些问题,如下所述:http://stackoverflow.com/questions/24386637/using-multiple-angularjs-directives-in-one-div-tag
      • 您对“您可以明确定义优先级”是正确的。您可以在一个 DOM 节点上定义两个指令及其子范围(范围:true),但只会创建两个通用的范围。如果其中一个具有子作用域(作用域:true)而另一个具有孤立作用域(作用域:{}),则不能在一个 DOM 节点上定义两个指令,角度会抛出错误。这是我的问题,我没有问指令优先级,我问的是如果两个指令有自己的子作用域或独立作用域会发生什么。
      猜你喜欢
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多