angular - 如何将在 TypeScript 中定义为字符串的 Angular 模板解析为具有正确绑定的有效 HTML
问题描述
我想使用 ApexCharts 作为 Angular 中的一种可视化方式。ng-apexcharts 是充当包装器的 npm 包。因为 ApexCharts 的默认工具提示不适合我的设计,所以我想制作一个自定义工具提示组件。
可以通过以下方式指定自定义工具提示:
HTML:
<apx-chart ... [tooltip]="tooltip"></apx-chart>
打字稿:
@Component({...})
export class LineChartComponent implements OnInit {
tooltip: ApexTooltip = {
custom: ({ series, seriesIndex, dataPointIndex, w }) => {
return "<div>Custom tooltip HTML</div>"
}
};
...
}
我有以下问题:
当试图将这样的模板定义为工具提示 HTML
`<div class="SOME_CLASS"><mat-card>${SOME_VALUE}</mat-card></div>`
并将其添加到组件的 CSS 文件中
.SOME_CLASS {
color: red;
}
class 属性和像mat-card这样的非 HTML 组件不会转换为 DOM 中的适当表示。只是粘贴了字符串。HTML 结构可以在这里找到。
有什么方法可以让 Angular 正确绑定这个模板?
PS:我无权访问工具提示组件,因此指定
<tooltip [innerHtml]="SOME_VARIABLE"></tooltip>
也不会工作。
解决方案
感谢 JB Nizet 的评论,我设法实现了所需的功能。ng-template
解决方案是在组件的 HTML中定义 a ,如下所示:
<apx-chart ... [tooltip]="tooltip"></apx-chart>
<ng-template #tooltipTemplate>
<div>
~
<mat-card>TEST</mat-card>
</div>
</ng-template>
然后我必须实现TemplateRef
以引用模板并创建一个EmbeddedView
我可以用来获取我的 HTML 的ng-template
:
export class LineChartComponent implements OnInit {
@ViewChild("tooltipTemplate", { static: true }) tooltipTemplate: TemplateRef<any>;
tooltipViewRef: EmbeddedViewRef<any>;
tooltip: ApexTooltip = {
custom: ({ series, i, j, w }) => {
const dynamic = series[i][j].toString();
return this.tooltipViewRef.rootNodes[0].outerHTML.replace("~", dynamic);
}
};
...
ngOnInit() {
this.tooltipViewRef = this.tooltipTemplate.createEmbeddedView(
"tooltipTemplate"
);
}
}
这仅获取ng-template
. 我使用了一个符号~
来显示动态内容,因为模板是静态的。
请注意,模板内的 Font Awesome 图标将不起作用。我还没有找到实现它们的方法。
推荐阅读
- node.js - 从低内存消耗的流中提取二进制值
- java - 除了 NewRatio,还需要显式设置幸存者空间吗?
- jetbrains-ide - DotTrace,是否可以在配置文件会话期间修改 MVC5 Web 应用程序上的代码并重新运行......?
- c# - WCF 服务(非 Web)配置警告
- bintray - Bintray API - 无法匿名获取 OSS 许可证
- c++ - 如何静态链接qt应用程序
- javascript - 如何使用 js 验证这种格式(yyyy-mm)的日期?
- javascript - 是否可以选择多个文本框来输出一个相同的警报,而不是一次选择一个?
- asp.net - 从 Microsoft.AspNetCore.All 升级到 Microsoft.AspNetCore.App 会导致 Microsoft.AspNetCore.Antiforgery 出现版本冲突错误
- excel - VBA根据两个标准选择行;一个确切值和另一个值是另一张表上列表中的几个值之一