AngularとMaterial UIの連携時の表示不具合対応手順

AngularプロジェクトにMaterial UIを導入した際、コンポーネントが正しく表示されない事象が発生しました。npm installコマンドでの導入後に公式ドキュメントに従ってng addコマンドを実行しても同様の問題が継続。この原因は追加設定が自動適用されなかったためです。以下、解決手順を詳細に解説します。

ng add @angular/materialを実行すると、以下の設定オプションが表示されます。

  1. テーマの選択(事前ビルドテーマまたはカスタムテーマ)
  2. グローバルスタイルの適用
  3. ブラウザアニメーションの有効化

index.htmlにRobotoフォントとMaterial Iconsのリソースを追加します。

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>MaterialApp</title>
  <base href="/">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
  <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet">
  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<body class="mat-typography">
  <app-root></app-root>
</body>
</html>

ネットワーク環境によってはリソース取得が不安定になるため、ローカルにファイルを配置することを推奨します。

angular.jsonのstyles配列に事前ビルドテーマを追加します。

"styles": [
  "node_modules/@angular/material/prebuilt-themes/indigo-pink.css",
  "src/styles.scss"
]

src/styles.scssにグローバルスタイルを設定します。

html, body {
  height: 100%;
  margin: 0;
  font-family: Roboto, "Helvetica Neue", sans-serif;
}

package.jsonの依存関係を整合性のあるバージョンで設定します。

{
  "dependencies": {
    "@angular/animations": "~10.2.0",
    "@angular/cdk": "^10.2.7",
    "@angular/material": "^10.2.7",
    "@angular/common": "~10.2.0",
    "@angular/compiler": "~10.2.0",
    "@angular/core": "~10.2.0",
    "@angular/forms": "~10.2.0",
    "@angular/platform-browser": "~10.2.0",
    "@angular/platform-browser-dynamic": "~10.2.0",
    "@angular/router": "~10.2.0",
    "rxjs": "~6.6.0",
    "tslib": "^2.0.0",
    "zone.js": "~0.10.2"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.1002.0",
    "@angular/cli": "~10.2.0",
    "@angular/compiler-cli": "~10.2.0",
    "@types/node": "^12.11.1",
    "@types/jasmine": "~3.5.0",
    "@types/jasminewd2": "~2.0.3",
    "codelyzer": "^6.0.0",
    "jasmine-core": "~3.6.0",
    "jasmine-spec-reporter": "~5.0.0",
    "karma": "~5.0.0",
    "karma-chrome-launcher": "~3.1.0",
    "karma-coverage-istanbul-reporter": "~3.0.2",
    "karma-jasmine": "~4.0.0",
    "karma-jasmine-html-reporter": "^1.5.0",
    "protractor": "~7.0.0",
    "ts-node": "~8.3.0",
    "tslint": "~6.1.0",
    "typescript": "~4.0.2"
  }
}

package.json更新後、node_modulesディレクトリを削除しnpm installを実行して依存関係を再構築します。非ルートモジュールでコンポーネントを使用する際、エラーが発生する場合はルートモジュールと当該モジュールの両方でインポートが必要です。

タグ: angular-material Angular frontend-development Theming component-configuration

8月3日 18:27 投稿