Angular 2 SVG不渲染

Posted

技术标签:

【中文标题】Angular 2 SVG不渲染【英文标题】:Angular 2 SVG not rendering 【发布时间】:2017-04-05 06:17:21 【问题描述】:

我创建了一个组件来渲染我的应用程序中的 SVG 图像。

它们是动态加载的,但是,我的演示应用程序只显示一个更简单的版本。

http://plnkr.co/edit/g2tZXeUAMJ5zESx2EHT0?p=info

我试过<div [innerhtml]="data"></div><div> data </div>

虽然调用正确,但未加载 SVG。我花了一些时间在 gitter 中寻找解决方案,但我得到的最接近的是它正在被清理。

我假设的 innerHTML 正在被清理并且插值被忽略。它只显示原始的 svg 文本。

谢谢

【问题讨论】:

【参考方案1】:

Angular 正在清理内容。明确告诉 Angular 它可以信任您的 HTML

从 '@angular/core' 导入 Pipe, Sanitizer ;

您可以使用可重复使用的管道或直接致电sanitizer.bypassSecurityTrustHtml(html)

@Pipe(name: 'safe')
export class SafeHtml 
  constructor(private sanitizer:DomSanitizer)

  transform(html) 
    return this.sanitizer.bypassSecurityTrustHtml(html);
  

并像使用它

[innerHTML]="data | safe"

Plunker example

另见In RC.1 some styles can't be added using binding syntax

【讨论】:

在你走之前还要感谢一件事。如果我想通过该组件设置 svg 的样式,该怎么做? 我猜你的意思是***.com/questions/36265026/… 在较新版本的 Angular 中,您必须使用 DomSanitizer 而不是 Sanitizer 才能使用它【参考方案2】:

我想补充一下 Günter Zöchbauer 接受的答案,即在较新版本的 Angular 中,我们需要使用 DomSanitizer 而不是 Sanitizer,后者可以使用 import DomSanitizer from '@angular/platform-browser'; 导入。

【讨论】:

以上是关于Angular 2 SVG不渲染的主要内容,如果未能解决你的问题,请参考以下文章

angular2你如何在`ngFor`中渲染一个计时器组件

从指令 Angular 加载 Mat 图标

Angular 2 创建的 Svg 无法缩放

检测何时使用 Angular 加载嵌入式 svg

在渲染视图/模板之前等待 Angular 2 加载/解析模型

如何在 Angular 中更改 svg 元素的颜色?