【发布时间】:2013-08-28 19:44:33
【问题描述】:
(1) 我有一个名为portlet 的嵌入指令,它获取其内容并将其包装在一些样板代码中。例如:
<portlet>
<div class="foobar">My content</div>
</portlet>
遍历portlet的模板,即:
<div class="portlet">
<div class="icon"></div>
<div class="content" ng-transclude="">
</div>
</div>
然后变成:
<div class="portlet">
<div class="icon"></div>
<div class="content">
<div class="foobar">My content</div> <!--the original content
passed to portlet-->
</div>
(2) 我还有两个指令,dyn-form 和 dyn-form-field。是这样描述的:
<dyn-form>
<dyn-form-field type="textbox" placeholder="..." label="Name" />
<! ...and so on... -->
</dyn>
dyn-form的模板:
<form class="..." ng-transclude="">
</form>
每个dyn-field 的模板都会生成用于为其生成标签/字段的html。所以原来的代码被翻译成这样的:
<form class="...">
<label>Name: <input type="text" placeholder="..." /></label>
<!- ....and so on... -->
</form>
(3) 这就是问题所在。我想使用第三个指令dyn-form-portlet 来生成样板代码以显示每个表单上方显示的一些按钮,然后显示一个portlet,并将dyn-form 放在portlet 中。这就是我尝试这样做的方式:
<dyn-form-portlet>
<dyn-form>
<dyn-form-field />
</dyn-form>
</dyn-form-portlet>
dyn-form-portlet 的模板如下所示:
<div class="dyn-form-portlet">
<button>Foo</button>
<button>Bar</button>
<portlet ng-transclude="">
</portlet>
</div>
理论上这应该可行,即<dyn-form> 应该放在<portlet> 中,<dyn-form-field>s 应该放在<dyn-form> 中,等等。但是当我运行它时,我只看到dyn-form-portlet 显示的按钮和portlet 的代码,但portlet 是空的,并且没有显示表单。
是我做错了什么,还是这是一个错误?
【问题讨论】:
-
如果有人感兴趣,请打个招呼:plnkr.co/edit/FUYCQbw8Tnx3Qhcj4108?p=preview 如果您从 portlet 中删除 transclude: true ,它可以工作,但我不确定其中的含义。
-
这就是我认为正在发生的事情。
dyn-form-portlet模板中的<portlet>指令在链接指令之前由 Angular 编译,因此当dyn-form-portlet被处理时,其模板中的portlet标记已经被渲染。看看这个Plunker 并查看控制台输出。不知道这是一个错误还是只是在这种情况下 Angular 的自然行为。 -
@MichaelBenford 这确实是正在发生的事情,但它似乎是一个错误。我的意思是,
dyn-form中的所有子指令都被嵌入到dyn-form中,那为什么dyn-form-portlet和dyn-form应该不同呢?任何人都可以将此作为错误报告给 AngularJS 团队吗? -
@JesusRodriguez 谢谢
标签: javascript angularjs