我有一个Angular Material列表,我想根据外部提供的模板渲染项目。但是,这似乎会影响mat-list-item
组件呈现内容的方式,尤其是matLine
个孩子的内容。
按如下方式明确定义项呈现如下:
<mat-list>
<mat-list-item *ngFor="let item of items">
<h4 matLine [title]="item.name">{{item.name}}</h4>
<p matLine class="item-id">{{item.id}}</p>
</mat-list-item>
</mat-list>
但是,当使用模板(提供为@ContentChild
)时,呈现的列表最终看起来不同:
<mat-list>
<mat-list-item *ngFor="let item of items">
<ng-template [ngTemplateOutlet]="template" [ngTemplateOutletContext]="{$implicit: item}"></ng-template>
</mat-list-item>
</mat-list>
传入的模板:
<ng-template let-item>
<h4 matLine [title]="item.name">{{item.name}}</h4>
<p matLine class="item-id">{{item.id}}</p>
</ng-template>
一个示例差异是前一个示例最终将matLine
包装成div.mat-list-text
元素,而后者不会。
为什么这两个示例的行为不同,我如何对齐它们呢?
看起来问题是mat-list-item
会有选择地使用<ng-content select="...">
转让所提供的孩子。
从a bug report来看,这似乎不适用于目前通过模板提供的内容孩子。