我想在<mat-expansion-panel-header>
内的<mat-expansion-panel>
元素的左右两端添加两个HTML元素。如果我直接在HTML模板中添加元素(<my-html-element>
),它们将自动插入到<span class="mat-content">...
中,该元素由angular动态生成,并包含在<mat-expansion-panel-header></mat-expansion-panel-header>
中定义的所有内容。模板。
模板:
<mat-expansion-panel>
<mat-expansion-panel-header>
<my-html-element></my-html-element> <===============
<mat-panel-title>
<div class="title">
Hello World
</div>
</mat-panel-title>
<my-html-element></my-html-element> <===============
</mat-expansion-panel-header>
...
</mat-expansion-panel>
在浏览器中呈现,Angular如下创建它:
</mat-expansion-panel>
<mat-expansion-panel-header>
<span class="mat-content">
<mat-panel-title ...>
<div ... class="title"> Hello World </div>
</mat-panel-title>
<my-html-element></my-html-element> <===============
<my-html-element></my-html-element> <===============
</span>
<span class="mat-expansion-indicator ...></span>
</mat-expansion-panel-header>
</mat-expansion-panel>
我的元素呈现在标题的中间,而不是在边框处所期望的。结果应如下所示:
</mat-expansion-panel>
<mat-expansion-panel-header>
<my-html-element></my-html-element> <===============
<span class="mat-content">
<mat-panel-title ...>
<div ... class="title"> Hello World </div>
</mat-panel-title>
</span>
<span class="mat-expansion-indicator ...></span>
<my-html-element></my-html-element> <===============
</mat-expansion-panel-header>
</mat-expansion-panel>
我已经尝试使用@ViewChild
(在下面的代码中称为expansionHeader
)访问扩展面板标题,并尝试如下动态创建组件:
ngAfterViewInit(): void {
const factory = this.factoryResolver.resolveComponentFactory(MyHtmlElement);
const reference = this.expansionHeader.createComponent(factory);
}
但是,使用此代码,将这些组件作为同级添加到扩展面板标题中,而不是像我想要的那样作为其直接子级添加。
我的问题是我无法使用<mat-expansion-panel-header>
访问@ViewChild
的直接子级,因为它们是动态生成的。如果可以访问直接的孩子,则可以将组件作为同级对象添加到该孩子...
有什么方法可以将生成的组件添加为mat-expansion-panel-header
的直接子代,一个作为第一个子代,另一个作为最后一个子代?