【发布时间】:2020-03-07 18:11:03
【问题描述】:
我需要实现一个指令,在其宿主元素中添加 HTML 元素,同时将所有元素的内容放在 HTML 的特定部分,本质上是包装内容,就像 Angular Material 如何包装 @ 的内容一样987654321@ 和<span class="mat-button-wrapper">。
例如,组件将被放入这样的模板中:
<div my-directive>
my text
</div>
这应该被渲染:
<div my-directive>
<div class="my-class">
my text
</div>
</div>
我尝试过使用 WrapperComponent 并将其添加到指令的 ViewContainerRef 中,如下所示。
import { Directive, TemplateRef, ViewContainerRef, Component, Renderer2, ElementRef, ComponentFactoryResolver, ViewChild, ComponentRef } from '@angular/core';
@Component({
selector: 'my-wrapper',
template: `
<div class="my-wrapper">
<ng-content></ng-content>
</div>
`
})
export class WrapperComponent {
}
@Directive({
selector: '[wrapContent]'
})
export class WrapContentDirective{
wrapperRef: ComponentRef<WrapperComponent>;
constructor(
private renderer: Renderer2,
private templateRef: TemplateRef<any>,
private vcr: ViewContainerRef,
private cfr: ComponentFactoryResolver,
hostElement: ElementRef
) {
const wrapperFactory = this.cfr.resolveComponentFactory(WrapperComponent);
this.wrapperRef = this.vcr.createComponent(wrapperFactory);
}
}
但是包装器是在元素旁边呈现的,而不是在它里面。而且我还需要弄清楚如何将 ng-content 的内容投影到 WrapperComponent 中。
我该如何实现?
【问题讨论】:
标签: angular