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

kzmpq1sx  于 8个月前  发布在  Angular
关注(0)|答案(7)|浏览(115)

我需要在我的Angular项目中加载,显示和动态更改SVG图像的颜色,方法是应用不同的CSS类。
This question没有帮助,因为它使用了Modernizr库,我想避免它。我不想也复制path字段中的d标记的图像,我有直接在html文件的Angular 项目,因为这将是一个墙的文字,我不愿意接受。我可以接受,而不是使用一个外部专用库,以实现正确的结果,像ng-inline-svg,我试图使用以下方式:

<div class="svg1" aria-label="My icon"
   [inlineSVG]="'./assets/images/icons/ApplyIcon.svg'">
</div>

字符串
下面是一个CSS类:

.svg1 {
  color: green;
}


它将图像完美地加载为常规的img标记,但如果我尝试将自定义类应用于它以更改图像颜色,则不起作用。
此外,我尝试以以下方式使用object标记:

<div class="col-2">
    <object
       id="svg1"
       data="./assets/images/icons/ApplyIcon.svg"
       type="image/svg+xml">
    </object>
</div>


但是,同样,如果我用CSS指令color: green;fill: green;将一个类应用于object标记,什么也不会改变。

bvuwiixz

bvuwiixz1#

使用component.html文件中的svg元素,并使用[ngClass]指令根据条件动态更改内部svg类。
举例说明:
component.ts

data.state = "New" || "In-Progress" || "Completed" // this changes dynamically based on the data

字符串
component.html:

<svg <circle class="cls-3" [ngClass] = "{'New': 'blue', 'In-Progress':'orange','Completed':'green'}[data.state]" cx="8.21" cy="8.01" r="2.44" transform="translate(-3.22 8.89) rotate(-48.73)"/></svg> // inner class of svg element


component.css:

.blue {
    fill:blue
}
.orange{
   fill: orange
}
.green {
   fill: green
}

tkqqtvp1

tkqqtvp12#

我尝试了不同的方法来改变img src SVG的颜色,最终实现了使用SVG作为一个面具,它的工作预期为我。
Angular HTML:

<div class="icon" [ngStyle]="{'mask': 'url(' + icon + ') no-repeat center', '-webkit-mask': 'url(' + icon + ') no-repeat center'}"></div>

字符串
Angular CSS

.icon {
    background-color: #0000; // Here you can the svg color
  }

2fjabf4q

2fjabf4q3#

在我的例子中,我需要使用Angular动态更改SVG元素中特定路径和圆圈的颜色。下面是我如何实现的:
1.在你的Angular组件中Declare一个颜色变量:

export class YourComponent {
        color: string = 'yourDefaultColor';
    }

字符串
1.在HTML模板中,使用属性绑定动态设置SVG元素的fill属性:

<svg>
      <path [attr.fill]="color" ... />
      <!-- Other SVG elements -->
</svg>


确保将'yourDefaultColor'替换为所需的默认颜色。

0wi1tuuw

0wi1tuuw4#

使用setAttribute()属性更改SVG的颜色,

document.getElementById("svg1").setAttribute("fill", "green");

字符串

tvokkenx

tvokkenx5#

fill: green;

字符串
仅适用于路径元素,通常存在于svg元素中。color属性是字体颜色,它不会对svg元素起作用。在您的场景中,您可以在下面的事情1)在您的文件夹/assets/images/icons/ApplyIcon. svg编辑svg图标,并为该路径给予属性fill=“绿色”2)如果你想在多个地方使用不同颜色的图标,那么上面的方法将不起作用,因为相同的颜色将应用于所有地方。在这种情况下,你可以简单地删除fill=“color”从svg中的所有路径。在此之后,您可以应用css

fill:color;


在这种情况下,虽然fill:color没有应用在SVG上,但它会遍历到子元素路径,因此它会工作。

hgncfbus

hgncfbus6#

我最近遇到了同样的问题,并通过生成一个新的Angular组件并使用我的.svg文件代替组件的.html文件来解决它。
例如,更新模板路径以指向您的.svg,像这样:templateUrl: './my-icon.component.svg'。然后您可以在SVG文件中添加Angular指令。
看看这个例子:https://levelup.gitconnected.com/using-svg-files-as-component-templates-with-angular-cli-ea58fe79b6c1

gstyhher

gstyhher7#

公认的答案是好的,但如果你有一个臃肿的SVG呢?
我们首先需要使用@ngneat/svg-icon转换项目中的SVG或所有SVG
if the fill or stroke properties of elements in the SVG are set to currentColor, they will have the color defined for the containing DOM element,. So the color can easily be changed by changing the color style on the svg-icon element.
移动你的SVG图标到src/assets/svg目录运行ng add @ngneat/svg-icon
此命令将svg-icon安装到您的项目中,并自动将svg生成到ts文件中,在ts文件中,svg被转换为包含以下内容的对象

  • name键:这是为svg生成的名称,将用于标识svg
  • data键:这本质上是从svg文件复制的svg代码

生成的svg可以在app/svg目录中找到
查看app.module.ts文件,SvgIconsModule被导入,并在@Ngmodule导入中声明。
从app/svg目录导入所有你想在项目中使用的svg,并把它放在SvgIconsModule显示的图标数组中。

import { SvgIconsModule } from '@ngneat/svg-icon';
import { appMasterCardLogoIcon, appPaypalLogoIcon, appVisaLogoIcon } from './svg';

@NgModule({
  ...,
  imports: [
    BrowserModule,
    SvgIconsModule.forRoot({
      icons: [appApplePayLogoIcon,
        appMasterCardLogoIcon,
        appPaypalLogoIcon,
        appVisaLogoIcon],
    })
  ],
 ...
})

字符串
你现在可以在你的组件中的任何地方使用svg-icon标签,那么属性key将是生成的name键(用于标识svg)
因为fill或stroke属性被设置为currentColor,所以我们可以使用svg-icon上的color属性来控制颜色
我们还可以向svg-icon标记添加一个类,并使用ng-class控制样式

<svg-icon key={{payment.logoKey}} [ngClass]="{'selected-payment': payment.isSelected}"class="payment-logo"></svg-icon>

相关问题