gpt4 book ai didi

angularjs - 如果指令具有独立的作用域,为什么 ng-transinclude 的作用域不是其指令作用域的子级?

转载 作者:行者123 更新时间:2023-12-02 22:16:59 30 4
gpt4 key购买 nike

给定一个带有嵌入和隔离范围的指令(container1),当链接指令时,我有这些范围:

Scope 004           <-- scope of the body
Scope 005 <-- scope of directive container1
Scope 006 <-- scope of the ng-transclude

我预计:

Scope 004            <-- scope of the body
Scope 005 <-- scope of the directive
Scope 006 <-- scope of the ng-transclude

如果同一个指令具有共享作用域而不是隔离作用域,我会得到预期的结果。

这给我带来了一个问题,因为如果嵌入的内容包含另一个具有隔离范围的指令(component1),我会得到:

Scope 004             <-- scope of the body
Scope 005 <-- scope of the directive
Scope 006 <-- scope of the ng-transclude
Scope 007 <-- scope of directive component1

我想使用这样的指令:

<container1>
<component1 data="objectExposedInContainer1"/>
</container1>

但这不起作用,在 component1 内部,$scope.dataundefined 因为 objectExposedInContainer1 不是在正确的范围内。

我有两个问题:

  • 如果指令具有隔离作用域,为什么 ng-transinclude 的作用域不是其指令作用域的子项?这是一个错误吗?
  • 如果这不是一个错误,容器指令如何将数据传递到它的内容,如果不是像我尝试的那样通过设置属性来实现。

这是一个不起作用的示例:http://plnkr.co/edit/NDmJiRzTF9e5gw8Buht2?p=preview 。由于 Plunker 是使用 Anguar 构建的,因此很难使用 Batarang 进行调试。我建议在本地下载代码。注释掉 app.jsline 10 以使其使用共享作用域工作。

最佳答案

Why ng-transclude's scope is not a child of its directive's scope if the directive has an isolated scope?

ng-transclude 旨在允许指令处理任意内容,而隔离范围旨在允许指令封装其数据。

如果ng-transclude没有保留这样的范围,那么您要嵌入的任何任意内容都需要知道指令的实现细节(即需要知道指令上可用的内容)您创建的隔离范围)。

If it's not a bug, how can a container directive pass data to it's content, if not by setting attributes like I tried.

如果容器指令和包含的指令是耦合的 - 即您编写了它们并且需要它们一起运行 - 那么它们应该通过共享 Controller 进行通信。

如果容器指令应该将内容注入(inject)到子级作用域中(例如 ng-repeat),那么您不应该使用隔离作用域。

<小时/>

Angular 文档对于行为应该是什么非常清楚:

"In a typical setup the widget creates an isolate scope, but the transclusion is not a child, but a sibling of the isolate scope. This makes it possible for the widget to have private state, and the transclusion to be bound to the parent (pre-isolate) scope."

关于angularjs - 如果指令具有独立的作用域,为什么 ng-transinclude 的作用域不是其指令作用域的子级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17788289/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com