Angular Material에서 파일 선택 버튼

작은 재료입니다.
Angular Material을 사용한 프로젝트에서 파일 선택 input <input type="file" />를 사용할 때 버튼을 mat-button으로 만드는 방법을 소개합니다.



HTML


<input type="file" style="display: none" #fileInput accept="image/*" (change)="onChangeFileInput()" />
<button mat-raised-button color="primary" class="file-select-button" (click)="onClickFileInputButton()">
 <mat-icon>attach_file</mat-icon>
  ファイルを選択
</button>

<p class="file-name" *ngIf="!file; else fileName">ファイルが選択されていません</p>
<ng-template #fileName>
  <p class="file-name">{{ file?.name }}</p>
</ng-template>
  • 1행 : 통상의 input 컨트롤에 대해서 #fileInput 의 형태로 템플릿 레퍼런스를 추가. 또한이 컨트롤은 mat-button으로 대체 될 예정이므로 display: none에서 숨 깁니다.
  • 2-4 행 : input의 대신이되는 mat-button, 클릭했을 때에 발화하는 이벤트 핸들러를 설정
  • 7 행 이상 : 선택한 파일 이름 표시

  • TypeScript


    import { Component, ViewChild } from '@angular/core';  // ViewChildをimport
    // ... 中略 ...
    export class FileInputComponent  {
      @ViewChild('fileInput')
      fileInput;
    
      file: File | null = null;
    
      onClickFileInputButton(): void {
        this.fileInput.nativeElement.click();
      }
    
      onChangeFileInput(): void {
        const files: { [key: string]: File } = this.fileInput.nativeElement.files;
        this.file = files[0];
      }
    }
    
  • 1 행 : 템플릿 참조를 사용해, 컴퍼넌트의 클래스 측으로부터 input에 액세스하기 위해서 ViewChild를 import 해 둔다.
  • 4 행 : 템플릿 참조를 사용하여 입력 요소를 얻습니다.
  • 9 행 : mat-button이 누른 이벤트를 input 요소에 전달하는 처리
  • 13 행 이후 : input의 change 이벤트의 발화를 받아 file 변수에 파일 내용을 저장하는 처리

  • 샘플



    stackblitz에 샘플을 준비했습니다.
    h tps // s ckb t…

    좋은 웹페이지 즐겨찾기