【发布时间】:2016-05-21 04:27:49
【问题描述】:
我有一个通用的<item> 指令和一个带有过滤器和分页工具的<listing> 指令,用于列出<item>:
示例:https://plnkr.co/edit/r6byzhFX5m674ONhH1JS?p=preview
<listing> 模板是这样的:
<div ng-repeat="item in items">
<item date="item">
<ng-transclude ng-transclude-slot="itemContent"></ng-transclude>
</item>
</div>
<item> 指令使用新的 Angular 1.5 多槽嵌入来轻松自定义页脚和页眉:
<item data="itemData">
<header>My header</header>
<footer>My custom footer</footer>
</item>
当我在使用<listing> 时尝试自定义这些项目时,出现了我的问题。如果我使用这样的东西:
<listing items="myItems">
<item-content>
<header>{{ item.name }}</header>
<footer>My custom footer for {{ item.name }}</footer>
</item-content>
</listing>
它不起作用,因为<item-content> 被插入到<item>,但<header> 和<footer> 没有被嵌入到它们的适当位置,它们无法读取item 范围变量。有什么方法可以实现吗?
【问题讨论】:
-
你能为此创建一个 plnker 或 fiddle 吗?想进一步研究这个问题。
-
据我所知,您正在尝试做的事情是行不通的。根据设计,transclude 改变了范围嵌套的方式。它使嵌入指令的内容具有指令外部的任何范围,而不是内部的任何范围。它使内容可以访问外部范围。因此,在您的示例中,
<item-header>和<item-footer>中的嵌入内容访问控制器范围。可能有一种方法可以使用link的transcludeFn参数来解决这个问题。但我不确定transcludeFn如何与多槽功能配合使用。 -
我想我找到了解决方案。将在今天晚些时候回复。
-
我会等你的帖子
标签: angularjs angularjs-ng-transclude