【发布时间】:2017-10-12 04:08:12
【问题描述】:
我们正在构建一个 Angular 4 组件库,其中一个组件是 Busy 组件。该组件的目的是允许开发人员在包含微调器图形的任何给定 HTML 元素上创建叠加层。
<div *xuiBusy="isBusy">...</div>
当isBusy 的值为真时,我们希望附加到div 的内部内容,以便我们可以在内容之上呈现覆盖元素。
我们已经能够将该组件附加到ViewContainerRef,但是这会将busy元素作为div的兄弟元素插入,而不是根据需要插入div。
ngOnInit(): void {
const compFactory = this._componentFactory.resolveComponentFactory(XuiBusyComponent);
const comp = this._viewContainer.createComponent(compFactory);
消费者做什么:
<div *xuiBusy="isBusy">
<span>This is the content</span>
</div>
当 isBusy 设置为 true 时,我们希望将市场更改为如下所示。请注意,<spinner> 已添加到 div 元素中。
<div *xuiBusy="isBusy">
<span>This is the content</span>
<spinner>Please wait...</spinner> <-- inserted by directive
</div>
感谢任何建议!
【问题讨论】:
-
如果是这样,你为什么不用...好问题。我们希望允许开发者消费者不必为他们的标记提供特殊结构来使组件工作。所以在最简单的形式中,我们希望允许他们用这个属性来装饰他们的元素,其余的由指令处理。那么你不应该使用div。您可以使用
和 。输出将是模板中的内容。没有 HTML 标签元素依赖。 angular.io/docs/ts/latest/api/common/index/… div 是消费者开发者使用的,只是一个例子。它也可以是形式、文章、正文等。这个想法是添加繁忙元素的复杂性由指令处理。这在 ng1 中很容易实现,因为我们可以在链接阶段追加/插入。
标签: angular angular2-directives