スポンサーリンク

Angular Materialのテーブルをmat-tableで作ってみる

作ったテーブル

ソースコード

app.module.ts

ここでは、MatTableModuleをインポートする。

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MatTableModule } from '@angular/material/table'; // 追加

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    BrowserAnimationsModule,
    MatTableModule // 追加
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

app.compnent.ts

テストデータを連想配列で作成する。

import { Component } from '@angular/core';

export interface FoodModel {
  name: string;
  id: number;
  price: number;
}

const FOOD_DATA: FoodModel[] = [
  {id: 1, name: 'りんご', price: 100},
  {id: 2, name: 'なし', price: 120},
  {id: 3, name: 'ぶどう', price: 200},
  {id: 4, name: 'マスカット', price: 300},
  {id: 5, name: 'メロン', price: 1000},
  {id: 6, name: 'スイカ', price: 300},
  {id: 7, name: 'いちご', price: 140},
  {id: 8, name: 'もも', price: 150},
  {id: 9, name: 'バナナ', price: 18},
  {id: 10, name: 'ブルーベリー', price: 200},
];


@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})

export class AppComponent {
  columnName = ['id', 'name', 'price'];
  dataSource = FOOD_DATA;
}


app.component.html

ここでテンプレートの設定をしています。

<section class="container">
  <table mat-table [dataSource]="dataSource">

    <ng-container matColumnDef="id">
      <th mat-header-cell *matHeaderCellDef> id </th>
      <td mat-cell *matCellDef="let data"> {{data.id}} </td>
    </ng-container>

    <ng-container matColumnDef="name">
      <th mat-header-cell *matHeaderCellDef> name </th>
      <td mat-cell *matCellDef="let data"> {{data.name}} </td>
    </ng-container>

    <ng-container matColumnDef="price">
      <th mat-header-cell *matHeaderCellDef> price </th>
      <td mat-cell *matCellDef="let data"> {{data.price}} </td>
    </ng-container>

    <tr class="header-row" mat-header-row *matHeaderRowDef="columnName; sticky: true"></tr>
    <tr mat-row *matRowDef="let row; columns: columnName;"></tr>
  </table>
</section>
  • [dataSource]に連想配列のデータを入れると、そのデータを1レコードずつ表示します。
  • ng-containerでセルの設定する値を入れます。
  • 最後にtr属性にmat-header-rowでヘッダー行の設定、mat-rowで通常の行の設定を加えられます。

app.component.scss

スタイルで、色やスクロールなどの調整をしています。

.container {
  height: 400px;
  width: 80%;
  overflow: auto;
  margin: auto;
}

table {
  width: 100%;

}

.header-row {
  background-color: rgb(179, 207, 209);
}