angular6添加material-svgIcon


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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM