在Angular 上,我显示了一个SVG:

<div [innerHTML]="svgImage" class="center">
</div>

SVG包含具有唯一ID的多边形,例如:

<polyline id="tp_31" fill="#FFFAEC" points="698.814,494.607 719.188,459.31 698.813,424.014 658.064,424.015 637.69,459.313
        658.065,494.608 698.814,494.607     "/>

我可以使用id Select 器在SCSS文件中分别设置每个多边形的样式:

#tp_31:hover {
  fill: blue;
}

然而,我不确定如何动态地做到这一点.SVG图像将来自服务器,我想以编程方式设置它的样式.我怎样才能最好地做到这一点呢?我试过使用[ngStyle],但我不确定如何将其与id Select 器一起使用.谢谢!

推荐答案

要对注入了[innerHTML]="svgImage"的SVG中的元素进行动态样式设置,可以在呈现后使用ANGLE的Renderer2来操作SVG内容.

创建一个ViewChild以引用容器:

import { ElementRef, ViewChild, Renderer2 } from '@angular/core';

@ViewChild('svgContainer') svgContainer: ElementRef;
    
constructor(private renderer: Renderer2) {}

使用[innerHTML]注入SVG内容:

<div #svgContainer [innerHTML]="svgImage" class="center"></div>

使用Renderer2设置样式:

ngAfterViewInit() {
  const container = this.svgContainer.nativeElement;

  const polygon = container.querySelector('#tp_31');

  this.renderer.setStyle(polygon, 'fill', 'blue');
  this.renderer.setStyle(polygon, 'stroke', 'red');
}

Html相关问答推荐

注册组件不显示当我导航到注册站点

当使用浮动标签和大小时,如何在 Select 组件中有更多可见选项?

Angular 分量被循环

小虫?CSS Flexbox间隙应用于两个内联文本块之间,因为它们之间存在绝对定位的元素

有没有办法根据另一个项目调整FlexBox项目的大小?

在Firefox中,使用写入模式:Vertical-LR时,不随内容扩展的css弹性项

OnChange函数未在下拉列表中使用一个选项触发

如何创建嵌套的动态表单元素

元素在向x提供溢出时被隐藏

为什么index.html在Django中有这样的名称?

多次使用组件时计数Angular 14中嵌套数组的指令

使用shinyjqui拖放到网格表中

为什么即使我点击其他地方,我的 contenteditable="true" 也会被激活?

本地和在jsfiddle上页面工作正常,但在GitHub上无法运行.

如何使用 CSS 应用带有笔划的文本阴影?

在 CSS 中的 div 中获取文本以环绕其他文本?

透明渐变凹矩形

从右到左支持百分号

按部分划分的表行带

我正在使用 react-router-dom 并创建了一个固定的导航栏,它在每个网页上不断改变大小,我不知道为什么