AngularマテリアルでカスタムSVGアイコンを使用する方法
序章
Angular Material ライブラリは、マテリアルデザインでスタイル設定されたAngularコンポーネントのスイートを提供します。 そのようなコンポーネントの1つは、<mat-icon>
コンポーネントです。 既製のマテリアルアイコンにはさまざまなものがあります。 しかし、マテリアルデザインのスタイルと一貫性を保ちながら、いくつかのカスタムアイコンを表示したい場合はどうでしょうか。 AngularMaterialコンポーネントで独自のSVGアイコンを使用する方法を学びましょう。
このチュートリアルでは、<mat-icon>
コンポーネントを使用して、標準のマテリアルアイコンフォントを使用します。 次に、<mat-icon>
コンポーネントを使用して、カスタムSVGアイコンをサポートします。
完全に機能するコードは、このGitHubリポジトリにあります。
前提条件
このチュートリアルを完了するには、次のものが必要です。
- Node.jsはローカルにインストールされます。これは、Node.jsのインストール方法とローカル開発環境の作成に従って実行できます。
この投稿は、Angularv4.2+の基本的な知識があることを前提としています。
このチュートリアルは元々、Angularv5.2+とAngularMaterialv5.2.4で作成されました。
このチュートリアルは、Angularv10.0.5およびAngularMaterialv10.1.1で検証されました。
Angular Materialを使い始めた場合は、この投稿を参照できます。
ステップ1—Angularプロジェクトの作成と依存関係のインストール
まず、ターミナルを開き、新しいプロジェクトディレクトリを作成します。
mkdir angular-material-custom-svg
次に、新しいディレクトリに移動します。
cd angular-material-custom-svg
次に、npm
を使用して、AngularCLIをdevDependency
としてインストールします。
npm install @angular/[email protected] --save-dev
これで、Angular CLIを使用して新しいAngularプロジェクトを作成し、このチュートリアルのニーズに合わせていくつかのオプションを設定できます。
ng new angular-material-custom-svg --directory=. --skipTests=true --routing=false --style=css
これにより、現在のディレクトリに新しいAngularプロジェクトが作成されます。 次のコマンドを使用して、AngularMaterialとその依存関係をインストールしましょう。
npm install @angular/[email protected] @angular/[email protected] --save
これで、チュートリアルプロジェクトの設定は完了です。 これで、プロジェクトでマテリアルアイコンを引き続き使用できます。
ステップ2—アイコンフォントで<mat-icon>
を使用する
デフォルトのマテリアルアイコンを使用するには、最初にグローバルスタイルシートにインポートする必要があります。 これを行うには、styles.css
ファイル(Angular CLIによって生成されたもの)を開きます。
nano src/styles.css
ファイルの内容を次のimport
ステートメントに置き換えます。
src / style.css
@import url("https://fonts.googleapis.com/icon?family=Material+Icons");
次に、MatIconModule
をインポートする必要があります。 app.module.ts
ファイルを開きます。
nano src/app.module.ts
次に、MatIconModule
にimport
を追加します。
src / app / app.module.ts
import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { MatIconModule } from "@angular/material/icon";
そして、それをモジュールのimports
の配列に追加します。
src / app / app.module.ts
@NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, MatIconModule ], providers: [], bootstrap: [AppComponent] })
これで、<mat-icon>
コンポーネントで組み込みのマテリアルアイコンを使用できるようになりました。 アイコンのテキスト名を追加すると、関連するアイコンのグリフが表示されます。
このチュートリアルでは、"mood"
アイコンを追加します(これは笑顔の顔のシンボルに似ています)。
マテリアルデザインのウェブサイトには、直接使用できるマテリアルアイコンの完全なリストがあります。
app.component.html
ファイルを開きます。
nano src/app/app.component.html
ファイルの内容を次のコード行に置き換えます。
src / app / app.component.html
<mat-icon>mood</mat-icon>
これまでのところを見てみましょう! アプリケーションを起動します。
ng serve
Webブラウザ(localhost:4200
)でアプリケーションを表示すると、"mood"
アイコンが表示されます。
これで、<mat-icon>
を使用してアイコンフォントを表示することはできません。 <mat-icon>
を使用してSVGを表示し続けることができます。
ステップ3—SVGで<mat-icon>
を使用する
カスタム"unicorn"
アイコンをプロジェクトに追加しましょう。
注: The NounProjectでユニコーンSVGアイコンを取得できます。 無料の基本的な使用法は、ライセンス要件ごとにアイコンの作成者を帰属させる必要があります。
アイコンをunicorn_icon.svg
としてプロジェクトのsrc/assets
フォルダーに保存します。
<mat-icon>
コンポーネントタグでカスタムユニコーンアイコンを使用するには、HttpClientModule
をインポートする必要があります。
app.module.ts
ファイルを開きます。
nano src/app/app.module.ts
次に、HttpClientModule
にimport
を追加します。
src / app / app.module.ts
import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { MatIconModule } from "@angular/material/icon"; import { HttpClientModule } from "@angular/common/http";
そして、それをモジュールのimports
の配列に追加します。
src / app / app.module.ts
@NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, MatIconModule, HttpClientModule ], providers: [], bootstrap: [AppComponent] })
これで、カスタム"unicorn"
アイコンをAngularMaterialが提供するMatIconRegistry
サービスに登録できます。
app.component.ts
を開きます:
nano src/app/app.component.ts
次に、MatIconRegistry
にimport
を追加します。
src / app / app.component.ts
import { Component } from "@angular/core"; import { MatIconRegistry } from "@angular/material/icon";
そして、サービスのインジェクションをコンポーネントに追加します。
src / app / app.component.ts
export class AppComponent{ constructor(private matIconRegistry: MatIconRegistry){ // ... } }
addSvgIcon
メソッドをコンポーネントのconstructor
メソッドに追加します。
src / app / app.component.ts
export class AppComponent{ constructor(private matIconRegistry: MatIconRegistry){ this.matIconRegistry.addSvgIcon( `icon_label`, `path_to_custom_icon.svg` ); } }
addSvgIcon
メソッドは、2つの引数を取ることによってアイコンを登録します。
最初の引数は、string
タイプのアイコンラベルです。
2番目の引数は、アイコンファイルの場所を指す相対URLパスです。
このURLパス文字列のタイプはSafeResourceUrl
です。 URLパス文字列をSafeResourceUrl
に解析するために、Angularが提供するDomSanitizer
を利用できます。
次に、DomSanitizer
にimport
を追加します。
src / app / app.component.ts
import { Component } from "@angular/core"; import { MatIconRegistry } from "@angular/material/icon"; import { DomSanitizer } from "@angular/platform-browser";
そして、サービスのインジェクションをコンポーネントに追加します。
src / app / app.component.ts
export class AppComponent{ constructor( private matIconRegistry: MatIconRegistry, private domSanitizer: DomSanitizer ){ this.matIconRegistry.addSvgIcon( `icon_label`, `path_to_custom_icon.svg` ); } }
相対URLパス文字列を指定すると、DomSanitizer
のbypassSecurityTrustResourceUrl
メソッドは、addSvgIcon
メソッドに必要な安全なリソースURLを返します。
これで、icon_label
をカスタム"unicorn"
ラベルに置き換えることができます。 そして、カスタム"unicorn_icon.svg"
アイコンが付いたpath_to_custom_icon.svg
。
addSvgIcon
の行を更新しましょう。
src / app / app.component.ts
export class AppComponent{ constructor( private matIconRegistry: MatIconRegistry, private domSanitizer: DomSanitizer ){ this.matIconRegistry.addSvgIcon( "unicorn", this.domSanitizer.bypassSecurityTrustResourceUrl("../assets/unicorn_icon.svg") ); } }
これで、カスタム"unicorn"
アイコンがMatIconRegistry
サービスに正しく登録されました。
カスタムアイコンを表示するには、コンポーネントのテンプレートを更新する必要があります。 app.component.html
を開きます:
nano src/app/app.component.html
そして、アイコンラベルを<mat-icon>
のsvgIcon
入力プロパティに渡します。
src / app / app.component.html
<mat-icon svgIcon="unicorn"></mat-icon>
あなたがこれまでに持っているものを見てみましょう! アプリケーションを起動します。
ng serve
Webブラウザ(localhost:4200
)でアプリケーションを表示すると、カスタムアイコンがマテリアルスタイルで表示されていることがわかります。
これで、マテリアルスタイルを使用して、アプリにカスタムアイコンのフルセットを表示できるようになりました。
コードをよりクリーンで保守しやすくするために、MatIconRegistry
をサービスクラスに移動してコードをリファクタリングできます。
結論
このチュートリアルでは、AngularMaterialの<mat-icon>
コンポーネントをMaterialIconsフォントとカスタムSVGで使用するための最初の調査を完了しました。 これにより、アプリケーション全体でマテリアルデザインのスタイルを一貫して順守することができます。
Angularについて詳しく知りたい場合は、Angularトピックページで演習とプログラミングプロジェクトを確認してください。
マテリアルデザインについて詳しく知りたい場合は、公式ドキュメントをご覧ください。