现在可以在 Material Design Icons - Angular 文档页面上找到有关如何将 Material Design 图标包含到您的 Angular Material 应用程序中的说明。
TL;DR:您现在可以利用 @mdi/angular-material NPM 包,其中包含作为单个 SVG 文件 (mdi.svg) 分发的 MDI 图标:
npm install @mdi/angular-material
然后可以将此 SVG 文件包含到您的应用中,方法是将其包含在您项目的 assets 配置属性中的 angular.json 中:
{
// ...
"architect": {
"build": {
"options": {
"assets": [
{ "glob": "**/*", "input": "./assets/", "output": "./assets/" },
{ "glob": "favicon.ico", "input": "./", "output": "./" },
{ "glob": "mdi.svg", "input": "./node_modules/@mdi/angular-material", "output": "./assets" }
]
}
}
}
// ...
}
您的应用程序的主模块还需要声明必要的导入(用于加载图标的@angular/common/http 中的HttpClientModule 和@angular/material/icon 中的MatIconModule),以及将图标集添加到注册表:
import { HttpClientModule } from '@angular/common/http';
import { NgModule } from '@angular/core';
import { MatIconModule, MatIconRegistry } from '@angular/material/icon';
import { DomSanitizer } from '@angular/platform-browser';
@NgModule({
imports: [
// ...
HttpClientModule,
MatIconModule
]
})
export class AppModule {
constructor(iconRegistry: MatIconRegistry, domSanitizer: DomSanitizer) {
iconRegistry.addSvgIconSet(
domSanitizer.bypassSecurityResourceHtml('./assets/mdi.svg')
);
}
}
现在也可以使用StackBlitz demo。
旧版本 Angular 的步骤如下所述:
只需按照以下步骤操作:
-
从 Angular Material 部分下的 here 下载 mdi.svg,并将其放在您的 assets 文件夹中,该文件夹应位于(从您的项目的根目录)/src/assets:
-
在您应用的模块(又名app.module.ts)中,添加以下行:
import {MatIconRegistry} from '@angular/material/icon';
import {DomSanitizer} from '@angular/platform-browser';
...
export class AppModule {
constructor(private matIconRegistry: MatIconRegistry, private domSanitizer: DomSanitizer){
matIconRegistry.addSvgIconSet(domSanitizer.bypassSecurityResourceUrl('/assets/mdi.svg'));
}
}
-
确保在assets 中包含.angular-cli.json 下的assets 文件夹(虽然默认情况下,它会在那里):
{
"apps": [
{
...
"assets": [
"assets"
]
}
]
}
-
最后,通过MatIcon 组件和svgIcon 输入使用它:
<mat-icon svgIcon="open-in-new"></mat-icon>