1. app/assets/util/util.svg.ts
統一管理svg字體庫,避免各個模塊分散加載。所以使用公共文件統一處理 再到core.module.ts中引入。在core模塊下的所有組價都可以使用svg,不用單獨加載
1 import { MatIconRegistry } from "@angular/material"; 2 import { DomSanitizer } from "@angular/platform-browser"; 3 4 // 統一管理svg字體庫,避免各個模塊分散加載。所以使用公共文件統一處理 5 // 再到core.module.ts中引入。在core模塊下的所有組價都可以使用svg,不用單獨加載 6 export const loadSvgsources = (ir:MatIconRegistry,ds:DomSanitizer) => { 7 const imgDir = 'assets/img'; 8 const sidebarDir = `${imgDir}/sidebar`; 9 ir.addSvgIcon('day',ds.bypassSecurityTrustResourceUrl(`${sidebarDir}/day.svg`)); 10 ir.addSvgIcon('month',ds.bypassSecurityTrustResourceUrl(`${sidebarDir}/month.svg`)); 11 ir.addSvgIcon('project',ds.bypassSecurityTrustResourceUrl(`${sidebarDir}/project.svg`)); 12 ir.addSvgIcon('projects',ds.bypassSecurityTrustResourceUrl(`${sidebarDir}/projects.svg`)); 13 ir.addSvgIcon('week',ds.bypassSecurityTrustResourceUrl(`${sidebarDir}/week.svg`)); 14 const days = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]; 15 const dayDir = `${imgDir}/days`; 16 days.forEach(d=>ir.addSvgIcon(`day${d}`,ds.bypassSecurityTrustResourceUrl(`${dayDir}/day${d}.svg`))); 17 18 // 增加一個svg圖標集合 19 const avatarDir = `${imgDir}/avatar`; 20 ir.addSvgIconSetInNamespace('avatars',ds.bypassSecurityTrustResourceUrl(`${avatarDir}/avatars.svg`)); 21 }
2. 再到核心模塊core.module.ts中引入並使用loadSvgsources(ir,ds)方法加載所有的svg;
。
import { NgModule, Optional, SkipSelf } from '@angular/core'; import { HeaderComponent } from './header/header.component'; import { FooterComponent } from './footer/footer.component'; import { SidebarComponent } from './sidebar/sidebar.component'; import { SharedModule } from '../shared/shared.module'; import { MatIconRegistry } from '@angular/material'; import { DomSanitizer } from '@angular/platform-browser'; import { loadSvgsources } from '../util/util.svg'; @NgModule({ imports: [ SharedModule ], exports:[ SharedModule, HeaderComponent, FooterComponent, SidebarComponent ], declarations: [HeaderComponent, FooterComponent, SidebarComponent] }) export class CoreModule { constructor( @Optional() @SkipSelf() parent:CoreModule, ir:MatIconRegistry, ds:DomSanitizer ){ if(parent){ throw new Error('模塊以及存在,不能再次加載'); } loadSvgsources(ir,ds); } }
3. 在html模板中使用
A:當avatar.svg一個文件,里面是一個集合的時候用法。
[util.svg.ts中定義的名稱] + ‘:’ + [svg的ID號]
<mat-icon svgIcon="avatars:svg-1"></mat-icon>
B:非集合單獨文件標簽用法。
<mat-icon svgIcon="week"></mat-icon>
<mat-icon svgIcon="month"></mat-icon>