angular - 角度,作为 ng-template 的输入
问题描述
我有一个工作正常的代码
<nz-timeline >
<nz-timeline-item
*ngFor="let event of this.events"
[nzColor]="getColorForEvent(event.eventType)"
[nzDot]="event.eventType == 'C' ? dotCreate
:event.eventType == 'M' ? dotMail
:event.eventType == 'P' ? dotPhone : '' "
>{{event.sentDate | date: 'yyyy-MM-dd HH:mm'}} - {{event.subject}}</nz-timeline-item>
</nz-timeline>
<ng-template #dotCreate>
<i nz-icon nzType="caret-down" style="font-size: 16px;"></i>
</ng-template>
<ng-template #dotMail>
<i nz-icon nzType="mail" style="font-size: 16px;"></i>
</ng-template>
<ng-template #dotPhone>
<i nz-icon nzType="phone" style="font-size: 16px;"></i>
</ng-template>
我想提供更多案例并编写更清晰的代码,例如
[nzDot]="getIconForEvent(event.eventType)"
但要做到这一点,我需要 return TemplateRef<any>
。
这个函数的实现应该怎么看?
如何dotCreate
连接ng-template #dotCreate
?
getIconForEvent(eventType: string): TemplateRef<any> {
switch (eventType) {
case 'C':
return 'dotCreate';
case 'P':
return 'dotPhone';
case 'M':
return 'dotMail';
case 'E':
return 'dotMail';
default:
return 'dotMail';
}
}
解决方案
只需使用@ViewChild
装饰器就可以访问 component.ts 文件中的 ng-template,就像这样:
export class MyComponent {
@ViewChild('dotCreate') dotCreate: TemplateRef<any>;
@ViewChild('dotPhone') dotPhone: TemplateRef<any>;
@ViewChild('dotMail') dotMail: TemplateRef<any>;
getIconForEvent(eventType: string): TemplateRef<any> {
switch (eventType) {
case 'C':
return this.dotCreate;
case 'P':
return this.dotPhone;
case 'M':
case 'E':
default:
return this.dotMail;
}
}
}
推荐阅读
- html - 如何使多个较小的图像按与它们下的大图像相同的量调整大小
- awk - 如果 awk 或 sed 满足当前行条件,则更新下一行或下一行
- redis - Redis 主/从内存使用情况
- office-js - 在 Word 加载项中用新段落替换段落
- spring-batch - 在 Spring Batch 作业中使用 Java ProcessBuilder - Tasklet
- excel - 如何从多个表创建数据透视表
- c++ - 正确声明嵌套模板结构。如何?
- sql - 多次返回时只返回最后一个结果集,多选
- c++ - 排序功能实现中的分段错误
- google-people-api - Google people.api,如何获取特定组的成员?