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