angularjs – 为什么ng-transclude的范围不是它的指令范围的子
给定一个指令(container1)与transclude和一个孤立的范围,当指令链接时,我有这些范围:
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.data是未定义的,因为objectExposedInContainer1不在正确的范围。 我有两个问题: >为什么ng-transclude的范围不是它的指令范围的子元素,如果指令有一个孤立的范围?这是一个错误? 这里是一个不工作的示例:http://plnkr.co/edit/NDmJiRzTF9e5gw8Buht2?p=preview.因为Plunker是用Anguar构建的,所以很难用Batarang进行调试。我建议在本地下载代码。注释掉app.js的第10行,以使其使用共享作用域。
ng-transclude旨在允许指令使用任意内容,隔离的范围旨在允许指令封装其数据。 如果ng-transclude没有保留这样的范围,那么任何被转录的任何内容都需要知道指令的实现细节(即它需要知道你创建的孤立范围上的可用内容)。
如果容器指令和包含的指令是耦合的 – 即你写了它们并且需要他们一起行动,那么它们应该通过共享控制器通信。 如果容器指令应该将内容注入到孩子的范围内(例如ng-repeat),那么你不应该使用一个孤立的范围。 角度文档很清楚的是什么行为应该是:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- twitter-bootstrap – 使用bootstrap的Angular 4下拉菜单
- angularjs – 量角器 – 选择当前元素的下一个兄弟
- bootstrap学习笔记-CSS-单选
- angularjs – 无法从数据中分配类型,因此默认为角度ui-grid
- scala – Play Idea失败 – 这个版本的sbt 0.11.3没有sbt-i
- SSH代理在docker compose容器内转发
- angularjs源码笔记(2)--loader modules
- twitter-bootstrap – 使用带Grails的Bootstrap 4
- CXF 学习一(创建Server和Client)
- 算法图解之递归