🔥

【Angular】Materialのmat-selectを共通化してみる

2024/07/28に公開

Angularは好きなんだけど、本音を言うとReactがいいなと思っている泉(@izumin_0401)です。

Angular Materialのプルダウンを共通化したい

ってことで、今回はmat-selectを共通化してみたンゴ。

ブログ記事はこちら

https://traveler0401.com/angular-mat-select-common/

ソースコード

共通mat-selectコンポーネント

pull-down.component.ts
import { CommonModule } from '@angular/common';
import { Component, EventEmitter, Input, Output } from '@angular/core';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatSelectModule } from '@angular/material/select';

interface Option {
  name: string;
  value: string;
}

@Component({
  selector: 'app-pull-down',
  standalone: true,
  imports: [CommonModule, MatFormFieldModule, MatSelectModule],
  template: `
    <mat-form-field [style.width]="width">
      <mat-select [(value)]="selected" (selectionChange)="change()">
        <mat-option *ngFor="let option of options" [value]="option.value">{{ option.name }}</mat-option>
      </mat-select>
    </mat-form-field>
  `,
})
export class PullDownComponent {
  @Input() width: string;
  @Input() selected!: string;
  @Input() options!: Option[];
  @Output() event = new EventEmitter<string>();

  change() {
    this.event.emit(this.selected);
  }
}

呼び出し側

app.component.html
<app-pull-down
  [selected]="selectedIndex"
  [options]="[
    { name: '未選択', value: '-1' },
    { name: 'hoge1', value: '0' },
    { name: 'hoge2', value: '1' },
  ]"
  (event)="changePullDown($event)"
></app-pull-down>

もっといい書き方ありそうだけど、一旦これでいいかな...

まとめ

Angular Materialの共通mat-selectコンポーネントを作ってみた。

「@angular/material」のimport箇所を減らせると嬉しくなるよね。

ではまた。

関連記事

https://zenn.dev/izumin_0401/articles/6c66f07665b631

最後に

暇つぶしにTwitterブログもやってるので見てね。

Discussion